まず、始める前に、私は VC++ 2008 プロフェッショナルを使用しており、Windows OS で Intel Core2 を実行しています。また、このコードは、Windows を実行している core2/corei7 以外では決して実行されないことも知っています。
次のような 2 つの条件を持つ while ループがあります: 注: これはかなり簡略化されたバージョンです。
while((a != b) && (array[a] < c))
最初の条件(a != b)
が false を生成した場合、2 番目の条件も評価されますか? それとも、ループはすぐに終了しますか?
私はいくつかのテストを行いましたが、それは確かに本当のようです.
ただし、ここに問題があります。最初の条件が false と評価された場合、2 番目の条件が評価されると、アクセス違反が生成されます。ただし、私が見ることができることから、最初の条件が false として評価されると、プログラムは 2 番目の条件を評価することを気にせず、ループを終了するので、私は救われます。
問題は、アクセス違反の問題を完全に取り除くには、非常に優れたきちんとしたコードを突然爆発させないことです。ただし、小さな「バグ」 (バグではなく、コンパイラの最適化であることはわかっています) のために、私はそれを回避できるようです。また、これはおそらく良いプログラミング手法ではないこともわかっていますが、正直なところ、私の状況では、それが機能する場合、私はすでにゲームの先を行っています。
私の質問は、この「バグ」またはプログラミングの不正行為が戻ってきて、いつか私を噛むのでしょうか? このセクションを徹底的にテストしたことを考慮しても、これを使用するのはこの 1 回だけですか?