3

在 C++11 中,我对类型之间的区别T以及reference to T它们适用于命名变量的表达式感到有些困惑。具体考虑:

int main()
{
    int x = 42;
    int& y = x;

    x; // (1)
    y; // (2)
}

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

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

它在 5.1.1.8 中说:

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

4

2 回答 2

10

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

如果表达式最初具有类型“引用T”(8.3.2,8.5.3),则T在任何进一步分析之前将类型调整为。

所以虽然标识符y有类型int&,但表达式y有类型int。表达式从不具有引用类型,因此您的两个表达式的类型都是int.

于 2013-05-15T14:00:00.817 回答
3

在这两种情况下,表达式都表示类型的左值。int表达式不能是引用,尽管您可以表达式的结果与左值右值引用绑定。

于 2013-05-15T13:57:59.620 回答