1

Cには次のものがあります。

return (abc(1) || abc(2));

abc(1 == 1)返される場合は、 ?trueが呼び出されます。abc(2)

4

8 に答える 8

9

いいえ、そうはなりません。これは「短絡」と呼ばれ、一般的なフロー制御メカニズムです。

a && bがtrue の場合にbのみ評価されます。aが偽の場合a、式全体が必ず偽でなければなりません。

a || bがfalse の場合にbのみ評価されます。aが false の場合でもa、式全体が true である可能性があります。

于 2013-04-10T13:20:53.293 に答える
5

いいえ。 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

これはブール代数から来ています

于 2013-04-10T13:20:51.040 に答える
3

abc(1==1) が true を返す場合、 abc(2) を呼び出しますか?

いいえ、そうはなりません。この動作は、ショートサーキットと呼ばれます。これは、C および C++ 標準によって保証されています。

C11(n1570)、§ 6.5.13 論理 AND 演算子

&ビットごとの二項演算子とは異なり、&&演算子は左から右への評価を保証します。2 番目のオペランドが評価される場合、1 番目と 2 番目のオペランドの評価の間にシーケンス ポイントがあります。最初のオペランドが 0 と等しい場合、2 番目のオペランドは評価されません。

(強調は私です。)

同じことがオペレーターにも当てはまります||

于 2013-04-10T13:22:08.063 に答える
1

||(論理比較) はそれ以上のチェックを中断しますが、|(ビットごとの比較) は中断しません。

あなたも読むかもしれません: と || または & および && 比較用

于 2013-04-10T13:21:36.980 に答える
1

いいえ、2 番目abc(2)のステートメントは、左のステートメントが次の場合にのみ呼び出されます。false

于 2013-04-10T13:22:09.790 に答える