В эта конференция, Скотт Мейерс начинает с того, что «lvalues - это, как правило, выражения, которые вы можете взять по адресу». Я подчеркиваю слово в целом: что такое lvalue, адрес которого вы не можете взять? (если он существует).
РЕДАКТИРОВАТЬ:
Пожалуйста, предоставьте фрагменты кода с вашими ответами, это прояснит ситуацию.
Я думаю, что битовые поля удовлетворяют вашим условиям … Я считаю, f.x
является lvalue, но вы не можете взять его адрес. Интересно, что вы тоже не можете сделать auto & x = f.x
,
C ++ 11 Раздел 8.3.1 Часть пункта 4: Поскольку адрес битового поля (9.6) не может быть получен, указатель никогда не может указывать на битовое поле.
struct foo {
int x : 3;
int y : 3;
int z : 3;
};
int main() {
foo f;
f.x = 3;
}
Я еще менее уверен в этой другой идее, но стандарт говорит, что вам не разрешено использование основная функция. Если взять адрес main и использовать его, то этого также будет достаточно. C ++ 11 3.6.1 Пункт 5.
И из комментария, который я оставил, я знаю, что TI расширяет свои компиляторы C и C ++, так что есть класс хранения, называемый cregister
что вы не можете взять адрес. (Потому что это относится к физическому регистру, который не имеет понятия адреса).
Вы можете взять адреса из именованных символов (например, против временных экземпляров). Вот что составляет lvalue, насколько я понял это объяснение.