問題タブ [aggregate-initialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - フィールドごとのコンストラクター生成のルールは何ですか?
クラスのイニシャライザ リスト構文を使用できるかどうかは、クラス フィールドにデフォルト値があるかどうかに依存することがわかりました。なんで?
正確には、次のコードを検討してください。
問題なくコンパイルされます。しかし、クラス フィールドにデフォルト値を追加すると、ビルドが停止します。
エラー 1 エラー C2440: 'initializing': 'initializer-list' から 'S' に変換できません
なんで?そのようなコンストラクターの生成に他に何が影響しますか?
c++ - 初期化時の評価順序
次のプログラムでは:
出力は
http://ideone.com/1ueWdKから clang3.7で
しかし、結果は次のとおりです。
http://rextester.com/l/cpp_online_compiler_clangでは、clang 3.7 も使用できます。
私自身のubuntuでは、gcc 6.2はconstructで内部コンパイラエラーを引き起こしますint aa[3][3] = {aa[2][2] = 1}
。
これは未定義の動作であると想定していますが、標準で決定的なステートメントを見つけることができません。
質問は:
副作用の評価順序は、イニシャライザ リストの代入 (例a[2] = 1
) および配列の実際の要素の初期化 (例a[2]
) に標準で定義されているかどうか。
定義済みまたは未定義として明示的に記載されていますか? それとも、明示的に定義されていないという理由だけで未定義になりますか?
または、評価順序以外の他の理由により、構造体に定義済みまたは未定義の動作がありますか?