0

重複の可能性:
Java と同様に、C++ でも短絡評価は保証されますか?
C++ は && をどのように処理しますか? (短絡評価)

次の構造体定義と特定のユース ケースがあります。

struct foo
{
   bool boo;
};

int main()
{
  foo* f = 0;
   .
   .
   .
  if ((f) && (f->boo)) // <--- point of contention
   return 0
  else
   return 1;
}

標準では、上記の if ステートメントの最初の中かっこのセットが常に 2 番目の前に評価されることを保証していますか?

上記のコードを書き直すのが最善ではない場合はどうすればよいですか?

現在、私は次の混乱を抱えています:

if (f)
{
   if (f->boo)
      return 0;
   else
      return 1;
}
else
   return 1;
4

2 に答える 2

5

はい、保証されています。括弧は不要です。

&&とはどちらも||短絡演算子です。左のオペランドを評価し、結果を判断するために必要な場合にのみ右のオペランドを評価します。

于 2012-07-12T00:47:04.997 に答える
5

スタイルの問題かもしれませんが、次のように言えます。

return (f && f->boo);

...またはもう少し明示的に:

return ((f && f->boo) ? 1 : 0);
于 2012-07-12T00:47:48.703 に答える