如何解决非模板函数中的尾随返回类型
我已经看到人们使用以下语法来实现功能:
auto get_next() -> int
{
/// ...
}
代替:
int get_next()
{
/// ...
}
我理解了两者,并且我知道尾随返回类型语法对于使用decltype的模板代码很有用。就我个人而言,我会避免使用其他代码的语法,因为在读取代码时,我更喜欢首先读取函数的具体返回类型,而不是最后读取该函数。
对上面所示的非模板代码使用尾随返回类型语法(个人喜好或样式除外)是否有优势?
解决方法
除了sergeyrar's answer之外,我还可以想象到有人可能希望跟踪非模板函数的返回类型:
-
为lambda表达式和函数指定返回类型与w.r.t相同。语法。
-
从左到右读取功能签名时,功能参数优先。这可能更有意义,因为任何函数都需要参数以返回值的形式产生任何结果。
-
您可以在指定返回类型时使用函数参数类型(反运算无效):
auto f(int x) -> decltype(x) { return x + 42; }
在上面的示例中这没有意义,但请考虑长迭代器类型名称。
一个潜在的好处是,它使所有声明的函数名称都排成一行:
auto get_next(int x,int y) -> int;
auto divide(double x,double y) -> double;
auto printSomething() -> void;
auto generateSubstring(const std::string &s,int start,int len) -> std::string;
来源:https://www.learncpp.com/cpp-tutorial/the-auto-keyword/
,您已经提到了尾随返回类型的主要用例。如果返回类型取决于参数,则使用它。 如果我们排除该用例,您可能会获得的唯一好处是增强了代码的可读性,特别是如果您的返回类型稍微复杂一些,但是在那种情况下使用尾随返回则没有技术优势。 / p>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。