web-dev-qa-db-ja.com

C ++配列の初期化

配列をすべて0に初期化するこの形式は

char myarray[ARRAY_SIZE] = {0}はすべてのコンパイラでサポートされていますか? 、

もしそうなら、他のタイプと同様の構文がありますか?例えば

bool myBoolArray[ARRAY_SIZE] = {false} 
75
Eli

はい。この形式の初期化は、すべてのC++コンパイラでサポートされています。 C++言語の一部です。実際、C言語からC++に来たのはイディオムです。 C言語では、= { 0 }は慣用的なユニバーサルゼロ初期化子です。これもほぼ C++の場合です。

このイニシャライザーは普遍的であるため、bool配列の場合、実際には別の「構文」は必要ありません。 0bool型の初期化子としても機能するため、

bool myBoolArray[ARRAY_SIZE] = { 0 };

falseで配列全体を初期化することが保証されています。と同様

char* myPtrArray[ARRAY_SIZE] = { 0 };

char *型のNULLポインターで配列全体を初期化することが保証されています。

読みやすさが向上すると思われる場合は、必ず使用できます

bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };

しかし、ポイントは= { 0 }バリアントが正確に同じ結果を与えるということです。

ただし、C++では、= { 0 }は、たとえば0で初期化できない列挙型など、すべての型で機能しない場合があります。しかし、C++は短い形式をサポートしています

T myArray[ARRAY_SIZE] = {};

つまり、{}の空のペアだけです。これにより、任意のタイプの配列がデフォルトで初期化されます(要素がデフォルトの初期化を許可する場合)。つまり、基本(スカラー)タイプの場合、配列全体が適切にゼロで初期化されます。

129
AnT

C++ 11のユニバーサル初期化構文では、「=」はオプションであり、一般的に記述する方が適切なスタイルと見なされていることに注意してください。

char myarray[ARRAY_SIZE] {0}
16
incises

このような方法でC++で配列を宣言できます。配列のサイズがわかっている場合は、整数の配列を宣言する必要があります:整数:int myArray[array_size]; Double:double myArray[array_size];文字と文字列:char myStringArray[array_size]; charとstringの違いは次のとおりです

char myCharArray[6]={'a','b','c','d','e','f'};
char myStringArray[6]="abcdef";

配列のサイズがわからない場合は、次のように配列を空白のままにしてください。

整数:int myArray[array_size];

ダブル:double myArray[array_size];

0
Tabish

はい、機能するはずであり、他のデータ型にも適用できると思います。

ただし、クラス配列の場合、初期化子リストの項目が配列の要素よりも少ない場合、残りの要素にはデフォルトのコンストラクターが使用されます。クラスにデフォルトコンストラクターが定義されていない場合、初期化子リストは完全でなければなりません。つまり、配列の各要素に1つの初期化子が必要です。

0
jasonline