我遇到了以下代码:
template <typename T, typename T1> auto compose(T a, T1 b) -> decltype(a + b) {
return a+b;
}
有一件事我不能理解:
在哪里可以找到函数标题中的箭头运算符(code->/code>)是什么意思?我完全从逻辑上猜测,
在C++11中,函数声明有两种语法:
    返回-类型标识符argument-declarations...
和
    codeauto/code>标识符argument-declarations...
它们是等价的。现在当它们是等价的时候,你为什么还想用后者呢?C++11引入了这个很酷的
template <typename T1, typename T2>
decltype(a + b) compose(T1 a, T2 b);
编译器会告诉您它不知道
您可以通过使用
template <typename T1, typename T2>
decltype(std::declval<T1>() + std::declval<T2>())
compose(T1 a, T2 b);
但现在变得很冗长了。因此提出并实现了备用声明语法,现在您可以编写
template <typename T1, typename T2>
auto compose(T1 a, T2 b) -> decltype(a + b);
而且它不那么冗长,范围规则也不需要改变。
C++14更新:C++14也只允许
    CodeAuto/code>标识符argument-declarations...
只要函数在使用前被完全定义,并且所有的
简单地说,它告诉返回类型是