在一个特定的问题,一个自我回答和评论之后,我想了解它是否是一个正确的解决方案,解决方法/黑客或者只是完全错误.
具体来说,我重写了代码:
T x = ...;
if (*reinterpret_cast <int*> (&x) == 0)
...
Run Code Online (Sandbox Code Playgroud)
如:
T x = ...;
if (*reinterpret_cast <volatile int*> (&x) == 0)
...
Run Code Online (Sandbox Code Playgroud)
用volatile指针的限定符.
让我们假设在我的情况下对待T是int有道理的.这是通过volatile引用解决指针别名问题吗?
供参考,来自规格:
[注意:volatile是对实现的暗示,以避免涉及对象的激进优化,因为对象的值可能会被实现无法检测到的方式更改.有关详细语义,请参见1.9.一般来说,volatile的语义在C++中与在C中的相同. - 最后的注释]
编辑:
上面的代码确实至少在GCC 4.5上解决了我的问题.