3

我见过人们使用以下语法来实现功能:

auto get_next() -> int 
{
   /// ...
}

代替:

int get_next()
{
   /// ...
}

我都了解,而且我知道尾随返回类型语法对于使用 decltype 的模板代码很有用。就我个人而言,我会避免使用其他代码的语法,因为在阅读代码时,我更喜欢首先阅读函数的具体返回类型,而不是最后。

如上所示,对非模板代码使用尾随返回类型语法有什么好处(个人偏好或风格除外)?

4

3 回答 3

4

除了sergeyrar 的回答之外,我可以想象有人可能会喜欢非模板函数的尾随返回类型:

  1. 为 lambda 表达式和函数指定返回类型与语法相同。

  2. 当您从左到右阅读函数签名时,函数参数首先出现。这可能更有意义,因为任何函数都需要参数才能以返回值的形式产生任何结果。

  3. 指定返回类型时可以使用函数参数类型(反之不行):

    auto f(int x) -> decltype(x)
    {
        return x + 42;
    }
    

    这在上面的示例中没有意义,但请考虑长迭代器类型名称。

于 2020-09-28T08:44:35.833 回答
2

一个潜在的好处是它使您声明的所有函数名称都对齐:

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/

于 2020-09-28T08:33:55.910 回答
1

好吧,您已经提到了尾随返回类型的主要用例。如果返回类型取决于参数,则使用它。如果我们排除该用例,您可能获得的唯一优势是增强代码的可读性,特别是如果您的返回类型有点复杂,但在这种情况下使用尾随返回没有技术优势。

于 2020-09-28T08:26:51.010 回答