定義により、デフォルトの初期化は、他の初期化が指定されていないときに発生する初期化です。C ++言語では、明示的な初期化子を指定しないオブジェクトはすべてデフォルトで初期化されます(C ++ 11§8.5/ 11)。タイプstd::array<T, N>
とのオブジェクトが含まれますT[N]
。
デフォルトの初期化が効果を持たず、オブジェクトの値を不確定のままにするタイプがあることに注意してください:非クラス、非配列タイプ(8.5 / 6)。その結果、そのようなタイプのオブジェクトのデフォルトで初期化された配列は、不確定な値を持ちます。例:
int plain_int;
int c_style_array[13];
std::array<int, 13> cxx_style_array;
Cスタイルの配列も、std::array
不確定値の整数と同様に、不確定値の整数で埋められplain_int
ます。
すべての要素をデフォルト値に初期化するために、すべての配列(サイズがゼロの配列を含む)で機能する構文はありますか?
「デフォルト値に」と言うとき、あなたは本当に「すべての要素を初期化する」ことを意味していると思いますT{}
。これはdefault-initializationではなく、value-initialization(8.5 / 7)です。C ++ 11では、各宣言に空の初期化子を与えることで、値の初期化を非常に簡単に要求できます。
int plain_int{};
int c_style_array[13]{};
std::array<int, 13> cxx_style_array{};
これにより、すべての配列要素が順番に値初期化されplain_old_int
、と、両方の種類の配列のすべてのメンバーがゼロに初期化されます。
T x[N]
構文と同等です。