Что & возвращает lvalue или rvalue? - PullRequest
0 голосов
/ 21 октября 2019

Согласно учебнику.

Оператору address-of (§ 2.3.2, стр. 52) требуется операнд lvalue и в качестве значения r возвращается указатель на его операнд.

int a = 6,c=9;
int *x = &a; //Here x is a lvalue.
x = &c;

Насколько мне известно, если мы можем назначить, это lvalue. Тогда почему в учебнике говорится адрес возврата rvalue. Может ли кто-нибудь объяснить мне это на непрофессиональном языке

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Насколько мне известно, если мы можем назначить

Это не обязательно верно в случае типов классов. Но это всегда верно для указателей, которые вы используете в примере.

Тогда почему в учебнике говорится адрес возврата rvalue

Ну, вы не можете присвоить ему:

&a = &c; // ill formed because &a is rvalue
int *x = &a; // OK. Not an assignment
x = &c;  // OK because x is lvalue
1 голос
/ 21 октября 2019

Учебник гласит: &a - это значение. Т.е. значение не может быть присвоено &a. Ошибка компиляции произойдет, если мы попытаемся скомпилировать приведенный ниже код.

int a = 6,c=9;
int *x = &a; //Here x is a lvalue.
&a = x; // Compilation error, as '&a' is an rvalue
...