[解決済み] C++の配列の初期化
2023-04-30 02:10:54
質問
は、配列をすべて0に初期化する形式です。
char myarray[ARRAY_SIZE] = {0}
はすべてのコンパイラでサポートされていますか?,
もしそうなら、他の型と似たような構文がありますか? 例えば
bool myBoolArray[ARRAY_SIZE] = {false}
どのように解決するのですか?
はい、この形式の初期化はすべての C++ コンパイラでサポートされています。これは C++ 言語の一部です。実際、これは C 言語から C++ に伝わったイディオムです。C 言語では
= { 0 }
は熟語で
普遍的なゼロ初期化子
. これはまた
はほとんど
の場合です。
このイニタライザは普遍的なものなので
bool
配列の場合、異なる構文が必要なわけではありません。
0
のイニシャライザーとして動作します。
bool
型でも同様に動作しますので
bool myBoolArray[ARRAY_SIZE] = { 0 };
は配列全体を初期化することが保証されています。
false
. と同様に
char* myPtrArray[ARRAY_SIZE] = { 0 };
型のヌルポインタで配列全体を初期化することが保証されています。
char *
.
読みやすさを向上させると考えるのであれば、確かに
bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };
が、要は
= { 0 }
バリアントでは
まさに
と同じ結果になります。
しかし、C++では
= { 0 }
で初期化できないenum型のような全ての型に対して有効とは限りません。
0
. しかし,C++ではより短い形式の
T myArray[ARRAY_SIZE] = {};
つまり、単に空のペアの
{}
. これは任意の型の配列をデフォルトで初期化します(要素がデフォルトの初期化を許すと仮定して)。つまり、基本的な(スカラー)型の場合、配列全体が適切にゼロ初期化されることになります。
関連
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] SetをArrayに変換するには?
-
[解決済み] 配列の初期化に関するすべての可能な構文
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】coutはstdのメンバではない
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】'std::cout'への未定義の参照