[C++11: 7.1.6.2/4]:
表示的类型decltype(e)
定义如下:
- if
e
是不带括号的id 表达式或不带括号的类成员访问 (5.2.5),decltype(e)
是由 命名的实体的类型e
。如果没有这样的实体,或者如果e
命名了一组重载函数,则程序是非良构的;- 否则,如果
e
是一个 xvalue,decltype(e)
是T&&
,其中T
的类型是e
;- 否则,如果
e
是左值,decltype(e)
是T&
,其中T
的类型是e
;- 否则,
decltype(e)
是 的类型e
。说明符的操作数
decltype
是未计算的操作数(第 5 条)。
第二种、第三种和第四种情况清楚地涉及表达式的类型,其中不包括任何多态性考虑。
但是,我不完全确定这里的“实体”是什么意思,第一种情况似乎是命名表达式引用的对象e
。对于“实体的类型”是指它的运行时类型还是它的静态类型对我来说是模棱两可的。