Из каких значений нельзя получить адрес?

В эта конференция, Скотт Мейерс начинает с того, что «lvalues ​​- это, как правило, выражения, которые вы можете взять по адресу». Я подчеркиваю слово в целом: что такое lvalue, адрес которого вы не можете взять? (если он существует).

РЕДАКТИРОВАТЬ:
Пожалуйста, предоставьте фрагменты кода с вашими ответами, это прояснит ситуацию.

4

Решение

Я думаю, что битовые поля удовлетворяют вашим условиям … Я считаю, 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 что вы не можете взять адрес. (Потому что это относится к физическому регистру, который не имеет понятия адреса).

7

Другие решения

Вы можете взять адреса из именованных символов (например, против временных экземпляров). Вот что составляет lvalue, насколько я понял это объяснение.

0

По вопросам рекламы [email protected]