Строгий псевдоним указателя: является ли доступ через «изменчивый» указатель / ссылку решением?
По пятамконкретная проблема, ответ на свой вопрос и комментарии к нему, я хотел бы понять, если это правильное решение, обходной путь / взломать или просто неправильно.
В частности, я переписал код:
T x = ...;
if (*reinterpret_cast <int*> (&x) == 0)
...
Как:
T x = ...;
if (*reinterpret_cast <volatile int*> (&x) == 0)
...
сvolatile
квалификатор к указателю.
Давайте просто предположим, что лечениеT
какint
в моей ситуации есть смысл. Имеет ли это доступ черезvolatile
Ссылка решить проблему с псевдонимом указателя?
Для справки, из спецификации:
[Примечание: volatile является подсказкой для реализации, чтобы избежать агрессивной оптимизации, связанной с объектом, потому что значение объекта может быть изменено средствами, не обнаруживаемыми реализацией. См. 1.9 для подробной семантики. В общем, семантика volatile должна быть такой же в C ++, как и в C. - примечание к концу]
РЕДАКТИРОВАТЬ:
Приведенный выше код действительно решил мою проблему по крайней мере на GCC 4.5.