我在MSDN article中看到了与此类似的函数定义:
auto incr(int i) -> int {return i+1;}
它与VS2012一起编译并正常工作。有人可以解释一下它的语法吗?它是一个命名的lambda表达式吗?在“The C ++ Programming Language,4th Edition”中描述了什么?为什么有人会这样写,而不是使用简单的形式:
int incr(int i) {return i+1;};
答案 0 :(得分:4)
这是一种尾随返回类型。虽然允许所有函数声明,但它在定义函数模板时非常有用。从函数模板返回的类型通常取决于某些表达式的结果,并且有相关类型的变量来表达它们是有帮助的,例如。
template <typename M, typename N>
auto multiply(M const& m, N const& n) -> decltype(m * n) {
return m * n;
}
由于m
和n
仅在声明参数后声明,因此在参数声明之后将返回类型放在之前的中模板代码。在非模板代码中,当可以推导出返回类型时,使用auto
可能对C ++ 14更有用。在C ++ 11中,它基本上是非模板代码的风格选择。