可能重复:
decltype and parenthesis
我在维基百科上发现了这个:
auto c = 0; // c has type int
auto d = c; // d has type int
decltype(c) e; // e has type int, the type of the entity named by c
decltype((c)) f = c; // f has type int&, because (c) is an lvalue
使用ideone编译器(他们使用的C ++ 0x idk)和typeinfo我无法看到e和f之间的差异。显然,我可能会失败,所以我想知道这是否是最终的C ++ 11标准行为。
答案 0 :(得分:2)
是的,这是标准行为。它写在§7.1.6.2[dcl.type.simple] / 4中,其中:
decltype(e)
表示的类型定义如下:
- 如果
命名的实体的类型e
是不明白的 id-expression 或未加密友的类成员访问权限,decltype(e)
是由e。- ...
- 否则,如果
e
是左值,则decltype(e)
为T&
,T
的类型为e
;- ...
由于c
没有括号且是 id-expression (此处为标识符,请参见§5.1.1[expr.prim.general] / 7),{{ 1}}将是decltype(c)
的类型,即c
。
由于int
有括号并且是左值(例如(c)
是有效表达式),(c)=1
将是decltype((c))
类型的左值引用类型,其中是(c)
。