vso*_*tco 25 c++ decltype auto c++14
我想(想)我明白了auto
.同样的decltype
.但是,在C++ 14中,可以有一些像decltype(auto)
生成函数的返回类型那样的代数.考虑以下:
decltype(auto) foo()
{
int m = 1;
return m;
}
Run Code Online (Sandbox Code Playgroud)
返回类型是int
,一切都有意义.
然而,
decltype(auto) foo()
{
int m = 1;
return (m);
}
Run Code Online (Sandbox Code Playgroud)
返回int&
(即引用int
).
我绝对没有想到为什么会发生这种情况,为什么这些括号根本没有任何区别!?希望有人可以对此有所了解.
PS:我也标记过,C++
因为有更多的人检查C++
标签C++14
.
Jon*_*ely 31
7.1.6.2 [dcl.type.simple]
- 对于表达式e,由decltype(e)表示的类型定义如下:
- 如果e是未加密的id-expression或未加密的类成员访问(5.2.5),则decltype(e)是名为的实体的类型通过e.如果没有这样的实体,或者如果e命名了一组重载函数,那么该程序就会形成错误;
- 否则,如果e是x值,则decltype(e)是T &&,其中T是e的类型;
- 否则,如果e是左值,则decltype(e)是T&,其中T是e的类型;
- 否则,decltype(e)是e的类型.
在您的例子中,你有return (m)
这样e
的(m)
.这不是一个没有特写的id-expression或类成员访问,所以我们转到第二个项目符号.它不是xvalue所以我们去第三个子弹.这是一个左值,所以该类型是T&
哪里T
的int
.