4

次のパラメータはどのような順序でテストされますか (C++ で)?

if (a || b && c)
{
}

私たちのアプリケーションでこのコードを見たばかりで、嫌いです。順序を明確にするためにいくつかの括弧を追加したいと思います。しかし、正しい場所にブラケットを追加していることがわからない限り、ブラケットを追加したくありません。

編集:受け入れられた回答とフォローアップ

このリンクにはより多くの情報がありますが、それが何を意味するのかは完全には明らかではありません。|| そうらしい || と && は同じ優先順位で、その場合、左から右に評価されます。

http://msdn.microsoft.com/en-us/library/126fe14k.aspx

4

5 に答える 5

7

[ http://www.cppreference.com/wiki/operator_precedence] (「C++ 演算子の優先順位」をグーグルで検索すると見つかります)

そのページは、グループ 13 の && が || よりも優先順位が高いことを示しています。グループ 14 にあるため、この式は || と同等です。(b & & c).

残念ながら、ウィキペディアの記事 [ http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence]はこれに同意していませんが、私のデスクには C89 標準があり、最初のサイトと一致しているので、私は'ウィキペディアの記事を修正します。

于 2008-09-22T09:45:20.413 に答える
4

ここから:

a || (b && c)

これがデフォルトの優先順位です。

于 2008-09-22T09:38:12.117 に答える
2

&&(ブールAND)は||よりも優先順位が高くなります (ブールOR)。したがって、以下は同じです。

a || b && c
a || (b && c)

良いニーモニックルールは、ANDは乗算のようなものであり、ORは加算のようなものであることを覚えておくことです。ANDを*に、ORを+に置き換えると、より馴染みのある同等のものが得られます。

a + b * c
a + (b * c)

実際、ブール論理では、ANDとORはこれらの算術演算子と同様に機能します。

aba AND ba * ba OR ba + b
---------------------------------------
0 0 0 0 0 0
0 1 0 0 1 1
1 0 0 0 1 1
1 1 1 1 1 1(実際には2ですが、1のふりをします)
于 2008-09-22T10:39:29.550 に答える
0

フォローアップに答えるために:明らかに、MSDNのテーブルは、おそらくまともなHTMLテーブルを実行できない(またはMicrosoftツールを使用して生成できない)誰かによって失敗しています。
明確なサブセクションがある、Rodrigoによって参照されているウィキペディアの表のように見えるはずです。
しかし、明らかに受け入れられた答えは正しいです、どういうわけか私たちは&&と||と同じ優先順位を持っています たとえば、*や+よりも。
あなたが提供したスニペットは私にとって明確で明確ですが、括弧を追加しても問題はないと思います。

于 2008-09-22T10:34:27.080 に答える
-2

わかりませんが、簡単に見つけられるはずです。

(true || false && true) の真理値を出力するステートメントを含む小さなプログラムを作成するだけです。

結果が true の場合、|| && よりも優先順位が高く、false の場合はその逆です。

于 2008-09-22T09:39:12.300 に答える