struct MyClass
{
std::array<int, 10> stdArr;
MyClass() : stdArr()
{}
};
MyClass c;
質問:std :: array <int, 10>がクラスメンバとしてゼロ初期化されていますか?
- は
c.stdArr
ゼロ初期化されますか? - はいの場合 - なぜですか?
私自身の矛盾した答え:
をそれはゼロに初期化されます。
std::array
は、c-配列のように振る舞うように望んでいます。 上記の例では、stdArr
がc-arrayだった場合、初期化リストの中でstdArr()
によってゼロで初期化されます。私は、初期化リストの中にmember()
と書いてオブジェクトを初期化することを期待しています。それは、ゼロ初期化されません。
std::array
は通常int[N]
のような基本的なタイプのint[10] _Elems;
- 通常、基本型と配列がデフォルト初期化されていない私の場合であり、単一の部材を有します。
std::array
は、デフォルト構成であることを意味する集約型です。_Elems
を初期化するカスタムコンストラクタがないので、ゼロ初期化されていないと思います。
C++ 11標準に従ってstd::array
の正しい行動は何ですか?
[CPP参考氏は述べています](http://en.cppreference.com/w/cpp/container/array)集計の初期化は 'のstdに動作すること:: array'、i。 e。要素**は**ゼロで初期化されます。 –
@ H2CO3集約初期化が機能するということは、 '{...} '構文を使用して初期化できることを意味します。これはここでは関係ありませんが、集計の初期化はありません。 – hvd
私は、それがデフォルトで初期化されたときとゼロで初期化されたときの完全な説明を持つ別の質問にリンクしました。 –