が、これは非常に安全である、私が働いてきたすべてのコンパイラでは、この"ブール短絡"は標準で規定されているのか、あるいはほとんどが最適化として使用されていますか?
Class* p = NULL;
if(p != NULL && p->Method() == OK){
// stuff
}
を考えてみましょう。私。ブール式の最初の部分はfalseと評価され、2番目の部分の評価が冗長なので、Method()の呼び出しは行われません。
これは、ほとんどのコンパイラが2番目の部分の評価を最適化するか、C/C++標準の命令による動作ですか?
ここでは簡単な注釈を追加するだけですが、コンパイラは標準で許可されていないとanythinを最適化しません。コンパイラの仕事は、あたかも標準が守られているかのように動作するコードを生成することです。したがって、コンパイラは、プログラムの動作に影響を与える可能性のあるコードを決して最適化してはなりません。 – jalf
まあ、私は決してdupとして彼自身の質問を閉じるために投票した人を見たことはありません。私はあなたがそのバッジに値すると思う! –
@Paul:乾杯しますが、これは最初から何を検索するのか分からなかったので特別なケースです。 – sharkin