Представьте себе следующее
int &i = *new int;
Если вы скажете, что i
является псевдонимом для другого имени - какое имя?Ссылка либо ссылается на объект или функцию.Когда вы говорите «glvalue», вы ссылаетесь на свойство определенного выражения, а не на свойство объекта.
int i = 0;
int &ri = i;
Теперь i
является выражением lvalue и ri
также является выражением lvalue (оба из синтаксической категории id-expression
).Они name (как найдено в name-lookup) ссылка и переменная int
.
Если вы теперь определяете идентификацию объекта для случая ri
, вам нужно взятьсделайте ссылку и сделайте выражение ссылающимся на объект, с которым оно было инициализировано.Это называется оценкой lvalue, потому что вы определяете свойство lvalue (то есть референта).
Вы должны сделать то же самое для случая i
.Т.е. вы выясняете, к какому объекту относится выражение lvalue i
.Таким образом, оценка glvalue для ri
отличается от оценки glvalue для i
, несмотря на то, что оба они дают один и тот же результат.
Оценка Rvalue означает получение lvalue и применение lvalue к преобразованию rvalue.Другими словами, чтобы прочитать значение.