当我跳过表达式的返回类型时
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++14decltype
中推导出没有规则的返回类型:
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
C ++14示例)是显式转换。
结论
如您所见,我可以在不使用C++11的替代函数语法特性的情况下完成所有操作。我对么?我可以完全忘记它而不会遇到任何技术问题吗?
一般来说,可以避免以下语法:
auto function() -> TYPE
{
return 0;
}
赞成以下语法:
TYPE function() // TYPE can be: auto, decltype(auto), or ...
{
return 0;
}
我是否忘记了 C++11 的尾随返回类型特性的任何使用,而 C++14 的函数返回类型推导特性是不可能的?