質問のタイトルはそれをすべて示しています:フォームの宣言にint a = 0, b = a
は未定義の動作がありますか?
質問する
654 次
2 に答える
12
いいえ、これは明確に定義されています。これは、2つの宣言子とを含む宣言a
ですb
。各宣言子には初期化子があります。
宣言内の各init-declaratorは、それ自体が宣言内にあるかのように個別に分析されます。
つまり、行は次のように扱われます。
int a = 0;
int b = a;
于 2013-03-12T20:37:30.270 に答える
8
いいえ、未定義動作はありません。
C ++ 11標準のパラグラフ8/3による:
宣言内の各init-declaratorは、それ自体が宣言内にあるかのように個別に分析されます。
また、脚注97で指定されているように:
複数の宣言子を持つ宣言は、通常、それぞれが単一の宣言子を持つ対応する一連の宣言と同等です。あれは
T D1, D2, ... Dn;
通常(*)と同等です
T D1; T D2; ... T Dn;
これは、a
最初に初期化され、次にb
初期化され、の値を想定することを意味しますa
。また、そうでない場合でも、これがUBであるかどうかについて、SOについてかなり長い議論があり、これがUBではないことについてある程度のコンセンサスが得られていることにも注意してください。
(*):コメントでOlaf Dietscheが説明しているように、この同等性が成り立たない状況については、同じ脚注で後述します。
于 2013-03-12T20:42:01.883 に答える