(bool1 && bool2)に遭遇したとき、c ++はbool1がfalseであることが判明した場合、bool2をチェックしようとしますか、それともPHPのように無視しますか?
質問が基本的すぎる場合は申し訳ありませんが、Schildtでもインターネットでもそのことについての言及は本当に見つかりませんでした。
(bool1 && bool2)に遭遇したとき、c ++はbool1がfalseであることが判明した場合、bool2をチェックしようとしますか、それともPHPのように無視しますか?
質問が基本的すぎる場合は申し訳ありませんが、Schildtでもインターネットでもそのことについての言及は本当に見つかりませんでした。
はい、&&
C ++の演算子は短絡評価を使用しているため、bool1
評価しfalse
てもわざわざ評価する必要はありませんbool2
。
「短絡評価」とは、Googleに求めて、インデックスで探したい空想的な用語です。
同じことが||
演算子でも起こります。bool1
評価true
すると、式全体が評価されずにtrueと評価されますbool2
。
とにかくすべての式を評価したい場合は、&
and|
演算子を使用できます。
C ++は短絡ロジックを使用するため、bool1
falseの場合、チェックする必要はありませんbool2
。
これは、bool2が実際にboolを返す関数である場合、またはポインターを使用する場合に役立ちます。
if ( pointer && pointer->someMethod() )
短絡ロジックがないと、NULLポインターを逆参照するとクラッシュしますが、短絡ロジックを使用すると、正常に機能します。
それは正しいです(短い回路の振る舞い)。operator&&
ただし、注意してください。呼び出された演算子が組み込みの演算子ではなく、ユーザー定義(と同じ)の場合、短絡は停止しますoperator||
。
C ++での&&
演算子の短絡-bool1
例でfalseの場合、bool2
チェック/実行されません。
これは短絡評価と呼ばれます(ウィキペディア)
&&演算子はC++の短絡演算子であり、bool1がfalseの場合はbool2を評価しません。
短絡評価は、最初の引数が式の値を決定するのに十分でない場合にのみ2番目の引数が実行または評価される、一部のプログラミング言語の一部のブール演算子のセマンティクスを示します。たとえば、ANDの最初の引数の場合関数はfalseと評価され、全体の値はfalseである必要があります。また、OR関数の最初の引数がtrueと評価された場合、全体の値はtrueである必要があります。
C ++では、&&と||の両方 オペレーターは短絡評価を使用します。
あなたが言及しているのは短絡評価です。コンパイラ固有の可能性があると思いましたが、リンク先の記事では言語固有として示され、C++は準拠しています。それが実際にコンパイラ固有である場合、それに従わないコンパイラを想像することはできません。私が現在使用している日常のコンパイラであるVS2008はそうです。基本的には演算子の優先順位に従い、条件の結果が保証されるとすぐに、