c++ 11表达式中变量的类型

C++11 type of variable in expression?

本文关键字:类型 变量 表达式 c++      更新时间:2023-10-16

在c++ 11中,我对Treference to T类型之间的差异有些困惑,因为它们适用于命名变量的表达式。具体考虑:

int main()
{
    int x = 42;
    int& y = x;
    x; // (1)
    y; // (2)
}

上式(1)中表达x的类型是什么?是int还是lvalue reference to int ?(它的值类别显然是lvalue,但这与其类型是分开的)

同样,表达式y at(2)的类型是什么?是int还是lvalue reference to int ?

在5.1.1.8中说:

[标识符主表达式]的类型是标识符的类型。结果是标识符表示的实体。如果实体是函数、变量或数据成员,则结果为左值,否则为右值。

你缺少的是这个(§5/5):

如果表达式最初的类型是" reference to T "(8.3.2, 8.5.3),则在进行进一步分析之前将该类型调整为T

所以尽管标识符y的类型是int&,表达式y的类型是int。表达式从来没有引用类型,所以两个表达式的类型都是int

表达式表示类型为int左值。表达式不能是引用,尽管可以用左值右值引用绑定表达式的结果。