13

Thingデフォルトのコンストラクターを持たないクラスがあります。

ここで、配列要素を一度に初期化する必要がある別のクラスを定義します。これは、既定のコンストラクターがないと、遅延代入を行うことができないためです。したがって、次のようになります。

class TwoThings
{
    public:

    Thing things[2];

    TwoThings() : things({Thing("thing 1"),Thing("thing 2")})
    {
    }
}

これは正しい方法ですか?

GCC は正常にコンパイルしますが、Clang はコンパイルしませんが、「初期化リスト」を使用する必要があると述べています。二重中括弧{{ ... }}などのいくつかの代替方法を試しましたが、Clang と同等のコンパイルを取得することができません。

Clangでデフォルトコンストラクタなしで配列を初期化する方法は?

4

1 に答える 1

14

はい、括弧で囲まれたメンバー配列の初期化は GCC 拡張機能です。標準にするために、単一のブレース セットを使用できます (C++11 が必要)。

TwoThings() : things{Thing("thing 1"),Thing("thing 2")}
{
}

C++11 を使用できない場合は、std::pair<Thing,Thing>または などの別のストレージ メソッドを使用することをお勧めしますstd::vector<Thing>

于 2015-04-20T09:22:51.480 に答える