相关疑难解决方法(0)

严格的指针别名:是通过'volatile'指针/引用访问解决方案吗?

一个特定的问题,一个自我回答和评论之后,我想了解它是否是一个正确的解决方案,解决方法/黑客或者只是完全错误.

具体来说,我重写了代码:

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指针的限定符.

让我们假设在我的情况下对待Tint有道理的.这是通过volatile引用解决指针别名问题吗?

供参考,来自规格:

[注意:volatile是对实现的暗示,以避免涉及对象的激进优化,因为对象的值可能会被实现无法检测到的方式更改.有关详细语义,请参见1.9.一般来说,volatile的语义在C++中与在C中的相同. - 最后的注释]

编辑:

上面的代码确实至少在GCC 4.5上解决了我的问题.

c++ volatile strict-aliasing type-punning

8
推荐指数
1
解决办法
1354
查看次数

标签 统计

c++ ×1

strict-aliasing ×1

type-punning ×1

volatile ×1