問題タブ [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++ - 集約初期化リストの特定の場所で、前の場所に渡された値は、対応するメンバーから安全に読み取ることができますか?
規格によれば、上記の例で「sa」と読み、s を a=5 および b=6 に初期化しても安全ですか? もしそうなら、ほとんどのコンパイラはこの規則に従いますか?
(上記は VC10 でコンパイルされます。)
c++ - アトミック構造体の均一な初期化?
編集: どちらもg++{{1, 2}}
で({1, 2})
動作し、clang では動作しません。clang の回避策はありますか?
c++ - 非静的メンバー初期化子を持つクラスの C++11 集計初期化
標準で許可されていますか:
このクラスはまだ集約されていますか?
clang
はこのコードを受け入れますが、受け入れgcc
ません。
c++ - リスト初期化で集約型を値初期化する方法
リスト初期化構文を使用してC++ 14で集約型を値初期化するにはどうすればよいですか?
これは集合体の初期化と見なされ、 の初期化されていないメンバーに対してエラーまたは警告が生成されますAggregate_t
。
これはまったく可能ですか?
編集:例
g++-4.9.2 でコンパイル:
c++ - デフォルトで構成できない構造体にユーザー定義のコンストラクターがないことは、標準に違反していますか?
struct
(a) ユーザー定義のコンストラクターを持たないもの、および (b) デフォルトのコンストラクターを生成できないものを定義することができます。たとえばFoo
、次のようになります。
Foo
集計の初期化を使用してインスタンスを作成することもできます。
私の通常のコンパイラ (VS2012) はしぶしぶこれを受け入れますが、2 つの警告が発生します。
警告 C4510: 'Foo': 既定のコンストラクターを生成できませんでした。
警告 C4610: 構造体 'Foo' はインスタンス化できません - ユーザー定義のコンストラクターが必要です
もちろん、警告 #2 が間違っていることを証明したところです。集計の初期化を使用してインスタンス化することもできます。私が試したオンラインコンパイラは上記を受け入れるのに十分満足しているので、VS2012はこの警告に対して過度に攻撃的であると推測しています. しかし、私は確信したいのですが、このコードは大丈夫ですか、それとも技術的に標準のあいまいな部分に違反していますか?