我认为(想到)我理解auto
。 decltype
相同。但是,在C ++ 14中,可以有一些像decltype(auto)
这样的反义词作为函数的返回类型。请考虑以下事项:
decltype(auto) foo()
{
int m = 1;
return m;
}
返回类型为int
,一切都有意义。
然而,
decltype(auto) foo()
{
int m = 1;
return (m);
}
返回int&
(即对int
的引用)。
我绝对没有想法为什么会发生这种情况,为什么这些括号会有任何不同!?希望有人可以对此有所了解。
PS:我还标记了C++
,因为检查C++
代码的人数多于C++14
。
答案 0 :(得分: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&amp ;,其中T是e的类型;
- 否则,decltype(e)是e的类型。
在您的示例中,您有return (m)
,因此e
为(m)
。这不是一个没有特写的id-expression或类成员访问,所以我们转到第二个项目符号。它不是xvalue所以我们去第三个子弹。它是一个左值,因此类型为T&
,其中T
为int
。