59

(bool1 && bool2)に遭遇したとき、c ++はbool1がfalseであることが判明した場合、bool2をチェックしようとしますか、それともPHPのように無視しますか?

質問が基本的すぎる場合は申し訳ありませんが、Schildtでもインターネットでもそのことについての言及は本当に見つかりませんでした。

4

7 に答える 7

69

はい、&&C ++の演算子は短絡評価を使用しているため、bool1評価しfalseてもわざわざ評価する必要はありませんbool2

「短絡評価」とは、Googleに求めて、インデックスで探したい空想的な用語です。

同じことが||演算子でも起こります。bool1評価trueすると、式全体が評価されずにtrueと評価されますbool2

とにかくすべての式を評価したい場合は、&and|演算子を使用できます。

于 2011-03-06T17:07:23.440 に答える
37

C ++は短絡ロジックを使用するため、bool1falseの場合、チェックする必要はありませんbool2

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

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

短絡ロジックがないと、NULLポインターを逆参照するとクラッシュしますが、短絡ロジックを使用すると、正常に機能します。

于 2011-03-06T17:08:12.820 に答える
19

それは正しいです(短い回路の振る舞い)。operator&&ただし、注意してください。呼び出された演算子が組み込みの演算子ではなく、ユーザー定義(と同じ)の場合、短絡は停止しますoperator||

このSOでの参照

于 2011-03-06T17:09:16.697 に答える
2

C ++での&&演算子の短絡-bool1例でfalseの場合、bool2チェック/実行されません。

于 2011-03-06T17:08:05.970 に答える
1

これは短絡評価と呼ばれます(ウィキペディア)

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

于 2011-03-06T17:08:14.567 に答える
1

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

C ++では、&&と||の両方 オペレーターは短絡評価を使用します。

于 2011-03-06T17:53:15.653 に答える
0

あなたが言及しているのは短絡評価です。コンパイラ固有の可能性があると思いましたが、リンク先の記事では言語固有として示され、C++は準拠しています。それが実際にコンパイラ固有である場合、それに従わないコンパイラを想像することはできません。私が現在使用している日常のコンパイラであるVS2008はそうです。基本的には演算子の優先順位に従い、条件の結果が保証されるとすぐに、

于 2011-03-06T17:12:24.330 に答える