6

struct(a) ユーザー定義のコンストラクターを持たないもの、および (b) デフォルトのコンストラクターを生成できないものを定義することができます。たとえばFoo、次のようになります。

struct Baz
{
   Baz(int) {}
};

struct Foo
{
   int bar;
   Baz baz;
};

Foo集計の初期化を使用してインスタンスを作成することもできます。

Foo foo = { 0, Baz(0) };

私の通常のコンパイラ (VS2012) はしぶしぶこれを受け入れますが、2 つの警告が発生します。

警告 C4510: 'Foo': 既定のコンストラクターを生成できませんでした。

警告 C4610: 構造体 'Foo' はインスタンス化できません - ユーザー定義のコンストラクターが必要です

もちろん、警告 #2 が間違っていることを証明したところです。集計の初期化を使用してインスタンス化することもできます。私が試したオンラインコンパイラは上記を受け入れるのに十分満足しているので、VS2012はこの警告に対して過度に攻撃的であると推測しています. しかし、私は確信したいのですが、このコードは大丈夫ですか、それとも技術的に標準のあいまいな部分に違反していますか?

4

2 に答える 2