Предположим, что x
был инициализирован действительным объектом, который был затем уничтожен, применяется §3.8 / 6:
Аналогично, до того, как срок жизни объекта начался, но после хранения который будет занимать объект, был выделен или, по истечении срока жизни объекта и до хранения, которое объект занят повторно используется или выпущен, может использоваться любое значение gl, которое ссылается на исходный объект, но только ограниченным образом. По строительству или разрушению объекта см. 12.7. В противном случае такое значение glvalue относится к выделенному хранилищу (3.7.4.2), и использование свойств glvalue, которые не зависят от его значения, четко определено. Программа имеет неопределенное поведение, если:
- преобразование lvalue-to-rvalue (4.1) применяется к такому glvalue,
- glvalue используется для доступа к нестатическому член данных или вызов нестатической функции-члена объекта или
- glvalue привязан к ссылке на виртуальный базовый класс (8.5.3) или
- glvalue используется как операнд dynamic_cast (5.2.7) или как операнд typeid.
blockquote>Итак, просто принимая адрес хорошо определен и (ссылаясь на соседний абзацы) даже можно продуктивно использовать для создания нового объекта вместо старого.
Что касается not , берущего адрес и просто записывающего
x
, это действительно делает абсолютно ничего, и это правильное подвыражение&x
. Так что это тоже нормально.