配列をすべて0に初期化するこの形式です
char myarray[ARRAY_SIZE] = {0} すべてのコンパイラでサポートされていますか?、
もしそうなら、他のタイプと同様の構文はありますか?例えば
bool myBoolArray[ARRAY_SIZE] = {false}
配列をすべて0に初期化するこの形式です
char myarray[ARRAY_SIZE] = {0} すべてのコンパイラでサポートされていますか?、
もしそうなら、他のタイプと同様の構文はありますか?例えば
bool myBoolArray[ARRAY_SIZE] = {false}
int a[10] = { 1, 2, 3 };が、に設定さa[3]..a[9]れることを知ってい0ます(「静的ストレージ期間を持つオブジェクトと同じように暗黙的に初期化されます」)。これはC ++にも当てはまりますか?
falseはと同じではありません0が{0}、0ではに変換されます。false(C ++の場合)では{}、変換についても気にする必要はありません。falseまたは0、nullポインタ、またはその他の型に依存するデフォルトに初期化されます。
回答:
はい、この形式の初期化はすべてのC ++コンパイラでサポートされています。これはC ++言語の一部です。実際、それはC言語からC ++にもたらされたイディオムです。C言語で= { 0 }は、慣用的なユニバーサルゼロ初期化子です。これは、C ++でもほとんど当てはまります。
このイニシャライザーはユニバーサルであるため、bool配列の場合、実際には別の「構文」は必要ありません。タイプの0初期化子boolとしても機能するため、
bool myBoolArray[ARRAY_SIZE] = { 0 };
配列全体をfalse。で初期化することが保証されています。と同様
char* myPtrArray[ARRAY_SIZE] = { 0 };
タイプのnullポインタで配列全体を初期化することが保証されていますchar *。
読みやすさが向上すると思われる場合は、必ず使用できます。
bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };
でも要点は = { 0 }バリアントがまったく同じ結果をもたらすということです。
ただし、C ++では= { 0 }、たとえば列挙型など、整数で初期化できないすべての型で機能するとは限りません。0。ただし、C ++は短い形式をサポートしています
T myArray[ARRAY_SIZE] = {};
つまり、の空のペアだけです{}。これにより、任意のタイプの配列がデフォルトで初期化されます(要素がデフォルトの初期化を許可していると仮定)。つまり、基本(スカラー)タイプの場合、配列全体が適切にゼロ初期化されます。
bool myBoolArray[ARRAY_SIZE] = { false };、配列を書き込むとすべてfalseに初期化されますが、書き込むbool myBoolArray[ARRAY_SIZE] = { true };と最初の要素のみがtrueに設定され、他のすべてはfalseに設定されます。説明はありますか?
boolと、残りはゼロで初期化されます。仕方ないよ。
bool myBoolArray[ARRAY_SIZE];に初期化しない場合、配列には当然ランダムな値が含まれているため、初期化によって異なる値を含む配列が返されるとは思っていませんでした。それで全部です。
これらのタイプの方法で、C ++で配列を宣言できます。配列のサイズがわかっている場合は、次の配列を宣言する必要があります。整数:int myArray[array_size];
ダブル:double myArray[array_size];
文字と文字列:文字と文字列char myStringArray[array_size];
の違いは次のとおりです。
char myCharArray[6]={'a','b','c','d','e','f'};
char myStringArray[6]="abcdef";
配列のサイズがわからない場合は、次のように配列を空白のままにする必要があります。
整数: int myArray[array_size];
ダブル: double myArray[array_size];
falseはと同じだと思います0(そうでなければif(false)falseと評価されません)ので、あなたが持っているものはおそらく99%のコンパイラで動作するでしょう。標準を引用するまで、他の1%については確信が持てません。