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 には次のように書かれています。
[識別子一次式] の型は、識別子の型です。結果は、識別子によって示されるエンティティです。エンティティが関数、変数、またはデータ メンバーである場合、結果は左辺値であり、それ以外の場合は prvalue です。