特定の問題、自己回答、およびそれに対するコメントに続いて、それが適切な解決策であるか、回避策/ハックであるか、または単に間違っているかを理解したいと思います。
具体的には、コードを書き直しました。
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と同じであることが意図されています。— end note]
編集:
上記のコードは、少なくともGCC4.5で私の問題を解決しました。