17
4

2 に答える 2

17

初期化されていないboolの動作が突然変化した理由を知りたいのですが?

コードを逆アセンブルして、コンパイラの動作を確認します。

私の推測では、値がローカルでのみ使用されるようになったため、コンパイラはそれを完全に最適化します。とにかく動作は未定義であるため、コンパイラは安全に任意の値を想定できますfalsebコンパイラに関する限り の値は一定であり、 のロジック全体switchが冗長であるため、これは非常に明白な最適化です。では、なぜそれを実行可能ファイルに入れるのでしょうか?

(ここで重要な点は、実際にbは 2 番目のコードでローカルにのみ使用され、最適化されていないコードでもさらに最適化がトリガーされることです。最初のコードは、コンパイラがそのような最適化を実行する前にインライン化する必要があります。経路を追跡する必要がありますが、これは簡単ではありません)。

于 2011-02-02T19:46:47.993 に答える