Cには次のものがあります。
return (abc(1) || abc(2));
abc(1 == 1)返される場合は、 ?trueが呼び出されます。abc(2)
いいえ、そうはなりません。これは「短絡」と呼ばれ、一般的なフロー制御メカニズムです。
a && bがtrue の場合にbのみ評価されます。aが偽の場合a、式全体が必ず偽でなければなりません。
a || bがfalse の場合にbのみ評価されます。aが false の場合でもa、式全体が true である可能性があります。
いいえ。 if returnsが呼び出されないことが( The Standardによって) 保証されています。abc(1)trueabc(2)
abc(1)が返される場合false、それが保証され、それabc(2)が呼び出されます。
と似てい&&ます: if you haveabc(1) && abc(2)はreturnの場合abc(2)のみ呼び出され、 returnの場合は呼び出されません。abc(1)trueabc(1)false
この背後にある考え方は次のとおりです。
true OR whatever -> true
false OR whatever -> whatever
false AND whatever -> false
true AND whatever -> whatever
これはブール代数から来ています
abc(1==1) が true を返す場合、 abc(2) を呼び出しますか?
いいえ、そうはなりません。この動作は、ショートサーキットと呼ばれます。これは、C および C++ 標準によって保証されています。
C11(n1570)、§ 6.5.13 論理 AND 演算子
&ビットごとの二項演算子とは異なり、&&演算子は左から右への評価を保証します。2 番目のオペランドが評価される場合、1 番目と 2 番目のオペランドの評価の間にシーケンス ポイントがあります。最初のオペランドが 0 と等しい場合、2 番目のオペランドは評価されません。
(強調は私です。)
同じことがオペレーターにも当てはまります||。
||(論理比較) はそれ以上のチェックを中断しますが、|(ビットごとの比較) は中断しません。
あなたも読むかもしれません: と || または & および && 比較用
いいえ、2 番目abc(2)のステートメントは、左のステートメントが次の場合にのみ呼び出されます。false