跳过表达式的返回类型时
C++11中的下列代码
auto function(X x, Y y) -> decltype(x + y)
{
return x + y;
}等于C++14中的下列代码
decltype(auto) function(X x, Y y)
{
return x + y;
}但是,在C++14中,可以不使用C++14规则推断返回类型。
auto function()
{
return 0;
}当我知道返回类型是什么的时候
C++11中的下列代码
auto function() -> int
{
return 0;
}等于C++03中的下列代码
int function()
{
return 0;
}一个不应该发生的奇怪的例子
C++11中的下列代码
auto function(X x, Y y) -> decltype(x * y)
{
return x; // Yeah! return x with the type of x * y expression!
}等于C++14中的下列代码
decltype(auto) function(X x, Y y)
{
return static_cast<decltype(x * y)>(x);
}请纠正我,如果上面的代码是错误的,并没有按照预期的工作。
编辑,根据注释(Yakk):它们实际上并不相等,第一个(__C++11示例)是隐式强制转换,而第二个( static_cast of C++14示例)是显式强制转换。
结论
正如您所看到的,我可以不使用C++11的其他函数语法特性来做任何事情。我说的对吗?我能完全忘记它而不遇到任何技术问题吗?
一般而言,可以避免使用以下语法:
auto function() -> TYPE
{
return 0;
}支持以下语法:
TYPE function() // TYPE can be: auto, decltype(auto), or ...
{
return 0;
}我是否忘记了C++11的尾随返回类型特性的任何用法,而这与C++14的函数返回类型演绎功能是不可能的?
发布于 2014-08-16 15:06:59
使用自动返回类型演绎的函数与具有显式返回类型的函数之间有三个重要区别(即使这是计算出来的):
[dcl.spec.auto]
13使用占位符类型声明返回类型的函数或函数模板的Redeclarations或专门化也应使用该占位符,而不是推断类型。
14用使用占位符类型的返回类型声明的函数不应是虚拟的(10.3)。链接到该提案,该提案已被纳入C++14草案:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
https://stackoverflow.com/questions/25341378
复制相似问题