web-dev-qa-db-ja.com

C ++は&&をどのように処理しますか? (短絡評価)

(bool1 && bool2)に遭遇すると、c ++はbool1がfalseであると検出された場合にbool2をチェックしようとしますか、またはPHPがするように無視しますか?

それが質問のあまりに基本的なものである場合は申し訳ありませんが、Schildtでもインターネットでもその言及を見つけることができませんでした。

43
Aleksandrs Ulme

はい、C++の&&演算子は 短絡評価 を使用するため、bool1falseに評価される場合、bool2を評価する必要はありません。 。

「ショートサーキット評価」とは、Googleで検索してインデックスで検索したい空想用語です。

54
jason

C++は短絡ロジックを使用するため、bool1がfalseの場合、bool2を確認する必要はありません。

これは、bool2が実際にboolを返す関数である場合、またはポインターを使用する場合に便利です。

if ( pointer && pointer->someMethod() )

短絡ロジックがなければ、NULLポインターを逆参照するとクラッシュしますが、短絡ロジックではうまく動作します。

30
Tim

それは正しいです(ショートサーキットの動作)。ただし、注意してください:呼び出された演算子が組み込み演算子ではなく、ユーザー定義のoperator&& (と同じ operator||)。

このSOの参照

15
Mat

&&演算子C++の短絡-if bool1はあなたの例では偽でした、bool2はチェック/実行されません。

2
wkl

これは短絡評価と呼ばれます (Wikipedia)

&&演算子はC++の短絡演算子であり、bool1がfalseの場合、bool2を評価しません。

1
trev

短絡評価は、最初の引数で式の値を決定するのに十分でない場合にのみ、2番目の引数が実行または評価される一部のプログラミング言語のブール演算子のセマンティクスを示します。たとえば、ANDの最初の引数関数はfalseと評価され、全体の値はfalseでなければなりません。また、OR関数の最初の引数がtrueと評価される場合、全体の値はtrueでなければなりません。

C++では、&&と||の両方演算子は短絡評価を使用します。

1
TCSGrad

あなたが言及しているのは 短絡評価 です。それはコンパイラ固有のものかもしれないと思ったが、私がリンクした記事はそれを言語固有のものとして示しており、C++はそれに従っている。それが確かにコンパイラ固有のものである場合、私はそれに従わないコンパイラを想像することはできません。私が現時点で使用している日々のコンパイラ、VS 2008はそうしています。基本的には演算子の優先順位に従い、条件結果が保証されるとすぐに、

0
TheTFo