在C++ 11中,我对类型之间的差异感到困惑T,reference to T因为它们适用于命名变量的表达式.具体考虑:
int main()
{
int x = 42;
int& y = x;
x; // (1)
y; // (2)
}
Run Code Online (Sandbox Code Playgroud)
x上面(1)中表达式的类型是什么?难道int还是lvalue reference to int?(它的值类别显然是一个lvalue,但这与它的类型是分开的)
同样y,上面(2)中表达式的类型是什么?难道int还是lvalue reference to int?
它在5.1.1.8中说:
[标识符主表达式]的类型是标识符的类型.结果是由标识符表示的实体.如果实体是函数,变量或数据成员,则结果是左值,否则为prvalue.
Jos*_*eld 10
你缺少的是这个(§5/ 5):
如果表达式最初具有"引用
T" 类型(8.3.2,8.5.3),则T在进行任何进一步分析之前调整类型.
因此,尽管标识符y具有类型int&,但表达式y具有类型int.表达式永远不会有引用类型,因此两个表达式的类型都是int.