替代函数语法差异

MBZ*_*MBZ 7 c++ declaration function-declaration c++11

这两个功能有什么区别?

auto func(int a, int b) -> int;

int func(int a, int b);
Run Code Online (Sandbox Code Playgroud)

Die*_*ühl 10

除了符号之外,上述情况没有任何区别.当您想要引用一个或多个参数来确定函数的返回类型时,替代函数声明语法变得很重要.例如:

template <typename S, typename T>
auto multiply(S const& s, T const& t) -> decltype(s * t);
Run Code Online (Sandbox Code Playgroud)

(是的,这是一个愚蠢的例子)

  • @leemes:编译器可能会使用旧样式语法执行相同的操作,但C++始终遵循在声明名称之前没有名称可见的规则.这条规则是否是一个很好的规则是一个单独的问题,但一致性有帮助. (3认同)
  • @leemes:是的,这是正确的,但它不违反规则:在类定义中定义的成员函数被视为在类定义之外定义,紧跟在类定义之后.类中的成员定义只是一个简写(虽然我不太确定它如何与类模板中的`friend`函数一起使用,因为这些函数不能在类定义之外定义). (2认同)

Joh*_*web 5

这两个声明之间没有任何有用的区别; 两个函数都返回一个int.

C++ 11的尾随返回类型对带template参数的函数很有用,其中返回类型在编译时才知道,例如在这个问题中:如何正确编写尾随返回类型?