次のvalueAとvalueBの初期化では、未定義の動作が発生しますか?初期化の評価順序
int array[2] = {1,2};
int index = 0;
int valueA = array[index++], valueB = array[index++];
これにはC++ 98とC++ 11の間に変更がありますか?
次のvalueAとvalueBの初期化では、未定義の動作が発生しますか?初期化の評価順序
int array[2] = {1,2};
int index = 0;
int valueA = array[index++], valueB = array[index++];
これにはC++ 98とC++ 11の間に変更がありますか?
この動作は明確に定義されています。 n3290§8宣言子ドラフトC++ 11から:それは単独で宣言していたかのように
宣言の各INIT-宣言子は別々に分析されます。
だからあなたのコードは同等です:
...
int valueA = array[index++];
int valueB = array[index++];
私はC++ 98標準を持っていないが、同じ文言は、ISO/IEC 14882に存在している:2003( "C++ 03 ")。
しかし、それはコンマで誘導されたシーケンスポイントが必要であるため、2つの初期化の順序を修正しません。 – TemplateRex
宣言自体は完全な表現です。あなたは完全な表現の後にシーケンスポイントを得ます。 – Mat
宣言は式でもありませんが、 'array [index ++]'は完全な式です。 – Cosyn
未定義の動作です。 コンマはsequence pointです。
なぜあなたはこれを行いますか?キーワードintの入力を1回だけ保存します。 – TemplateRex
既存のコードのバグを発見するのはどうですか?それとも知りたいのですか? – kyku