22

次のタイプのコードでは、各変数構造の間にシーケンスポイントがありますか、それとも結果は未定義ですか?

int a = 0;
int b = a++, c = a++;

ここでは、標準でシーケンスポイントへの特定の参照を見つけることができませんでした。それは定義されていないということですか、それとも検索に失敗したということですか?式の完了はシーケンスポイントですが、上記の初期化もカウントされますか?

4

2 に答える 2

26

8 [dcl.decl] / 3のおかげで、動作は明確に定義されていると思います

宣言内の各init-declaratorは、それ自体が宣言内にあるかのように個別に分析されます。

これは脚注でさらに次のように説明されています

複数の宣言子を持つ宣言は、通常、それぞれが単一の宣言子を持つ対応する一連の宣言と同等です。あれは

T D1, D2, ... Dn;

通常は

T D1; T D2; ... T Dn;
于 2011-06-20T16:11:12.687 に答える
9

ご想像のとおり、初期化式は完全な式(1.9 / 16、1.9 / 12)であるため、各初期化式の後にシーケンスポイントがあります。

于 2011-06-20T16:07:46.183 に答える