你能解释一下这个C ++函数定义的语法吗?

时间:2014-01-14 02:52:30

标签: c++

我在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;};

1 个答案:

答案 0 :(得分:4)

这是一种尾随返回类型。虽然允许所有函数声明,但它在定义函数模板时非常有用。从函数模板返回的类型通常取决于某些表达式的结果,并且有相关类型的变量来表达它们是有帮助的,例如。

template <typename M, typename N>
auto multiply(M const& m, N const& n) -> decltype(m * n) {
    return m * n;
}

由于mn仅在声明参数后声明,因此在参数声明之后将返回类型放在之前的中模板代码。在非模板代码中,当可以推导出返回类型时,使用auto可能对C ++ 14更有用。在C ++ 11中,它基本上是非模板代码的风格选择。