4

これは演算子の優先順位とは何の関係もないことに注意してください.. () と ++ 、未定義の動作とシーケンス ポイントなぜこれらの構造 (++ を使用) は未定義の動作なのですか? これに関する何百もの同様の質問がここにあります


簡単に言うと、結合性は標準で保証されていますか?

詳細な例:ウィキペディアの演算子の優先順位に関する記事から、同じ優先度operator*operator/持ち、それらはLeft-to-right演算子です。これは、標準が次のことを保証することを意味しますか?

int res = x / y * z / t;

として評価されます。

int res = ( ( x / y ) * z ) / t;

それとも実装定義ですか?

保証されている場合、引用していただけますか?


好奇心からです。これらの場合は常に括弧を書きます。
そのような質問があれば、削除する準備ができています。

4

2 に答える 2

6

公開されている最新のドラフトから

5.6 乗法演算子 [expr.mul]

1 乗法演算子 *、/、および % は、左から右にグループ化されます。

multiplicative-expression:
pm-expression
multiplicative-expression * pm-expression
multiplicative-expression / pm-expression
multiplicative-expression % pm-expression

したがって、解析は次のようになります。

int res = x / y * z / t;
int res = (x / y * z) / t;
int res = ((x / y) * z) / t;
于 2012-08-17T12:20:01.883 に答える
5

n3337 5.6/1

乗法演算子 *、/、および % は、左から右にグループ化されます。

標準の 5 パーを読み取ります。

于 2012-08-17T12:19:39.820 に答える