1. ホーム
  2. c++

[解決済み] 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] = {};

つまり、単に空のペアの {} . これは任意の型の配列をデフォルトで初期化します(要素がデフォルトの初期化を許すと仮定して)。つまり、基本的な(スカラー)型の場合、配列全体が適切にゼロ初期化されることになります。