Какое из этих пяти утверждений о lvalues верно?
Я делаю следующую загадку. Может, кто-нибудь может проверить, правильно ли я выбираю ответ. Посмотри.
Что из следующего является истинным утверждением о lvalue?
1 Значение l является результатом арифметической операции, в которой участвуют величины типа long int.
2 Все l-значения могут быть использованы в правой части оператора присваивания.
3 Значение l, по определению, является значением, отображаемым в правой части оператора присваивания.
4 По определению, lvalue - это область памяти, на которую косвенно ссылается указатель.
5 Значение l - это любая величина, которая может появиться в левой части оператора сдвига.
Хорошо, lvalue - это ссылка на объект в памяти. Поэтому, на первый взгляд, я подумал о 4-м ответе, но теперь он кажется не правильным, поскольку lvalue не является самой задержкой (а ответ 4 подразумевает это). # Тогда я думаю, что ответ 2 правильный, поскольку lvalues можно использовать слева и справа от оператора присваивания. Как вы думаете?
1 ответ
Я думаю, что ответ 2 является правильным, поскольку lvalues можно использовать слева и справа от оператора присваивания.
Да, это правда, именно по этой причине.
Проблема с другими утверждениями:
1) lvalue является результатом арифметической операции, включающей в себя величины типа long int.
Быть long int
или нет, не имеет ничего общего с lvalues. (long int)42
имеет тип long int
Тем не менее, это не lvalue.
3) Значение l, по определению, является значением, появляющимся в правой части оператора присваивания.
Нет, я не знаю, есть ли у него какое-то специальное имя, но это точно не определение lvalue.
4) По определению, lvalue - это область памяти, на которую косвенно ссылается указатель.
Нет. Для этого вам не нужны указатели. Как в int i = 1337;
, i
это значение. Однако в коде нет указателей.
5) lvalue - любая величина, которая может появиться на левой стороне оператора сдвига.
Нет. На первый взгляд, lvalues больше связаны с возможностью некоторого изменения (присваивание переменной или члену массива), поэтому этот оператор будет ближе к истине, если вместо shift operator
это читать assignment operator
, Однако не все l-значения могут быть изменены (например, константа является l-значением, но ее нельзя изменить после инициализации).