Вы, ребята, правы, но я думаю, что вопрос ОП может быть немного больше.Это тоже что-то, что меня беспокоило.
, поэтому
int x;
Теперь x
- это lvalue.Но что именно x ?Это место в памяти, где вы можете хранить вещи?Но подождите ... это будет &x
, что не является lvalue.
Другая странная вещь заключается в том, что x
даже не должно иметь места в памяти.Компилятор может решить оставить его в реестре все время. Теперь что делает его lvalue?
Я думаю, что лучший способ подвести итог, это то, что lvalue
- это концепция, используемая компилятором, но она не отображается во время выполнения.x
может быть lvalue, потому что компилятор знает, что может
store $x %ax
(я создаю синтаксис сборки; было слишком долго)
Или, возможно, он находится в регистре и знает, что
move %bx %ax
По сути, это lvalue, потому что компилятор знает, как сохранить что-то в «нем», но вы не можете ухватиться за это «это».