[解決済み] std::array のデフォルトの初期化?
質問
C++11で
std::array
という構文があることを保証していますか?
std::array<T, N> x;
が配列のすべての要素をデフォルトで初期化するという保証はありますか?
EDIT : もしそうでなければ、すべての要素をデフォルト値に初期化するために、すべての配列(ゼロサイズ配列を含む)で動作する構文があるのでしょうか?
EDIT について 参照 と書くと、デフォルトのコンストラクタの説明文に
(constructor) (implicitly declared) (public member function)
default-constructs or copy-constructs every element of the array
ということで、答えはイエスかもしれません。しかし、私は、標準または将来の標準に従ってそれを確認したいと思います。
どのように解決するのですか?
定義によると、デフォルトの初期化とは、他の初期化が指定されていないときに行われる初期化のことで、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
が不定値であるのと同様です。
すべての要素をデフォルト値に初期化するために、すべての配列(ゼロサイズ配列を含む)上で動作する構文はありますか?
あなたが "to their default value" と言ったとき、あなたは本当に "to initialize all elements to; を意味するのでしょうか。
T{}
という意味なのでしょう。それは
デフォルト初期化
であり、それは
値初期化
(8.5/7). C++11では、各宣言に空のイニシャライザーを与えることで、非常に簡単に値の初期化を要求することができます。
int plain_int{};
int c_style_array[13]{};
std::array<int, 13> cxx_style_array{};
これにより、配列のすべての要素が順番に値初期化され、結果として
plain_int
となり、両方の配列のすべてのメンバがゼロに初期化されます。
関連
-
[解決済み] C++コンパイラーエラー。"invalid declarator before" (無効な宣言子の前に)
-
C++11学習シリーズ No.3 ----配列/valarray
-
[解決済み] ArrayListの初期化を1行で行う。
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
-
[解決済み】CMakeでC++ 11を有効にするには?
-
[解決済み】std::weak_ptrはどんな時に役に立つの?
-
[解決済み] C++ ゼロ初期化 - なぜこのプログラムでは `b` は初期化されないのに `a` は初期化されるのですか?
-
[解決済み] gccでC++11を有効にするにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン