2

私はしばらくの間配列を使用しています。

いくつか質問があります。

これで、要素に値を指定せずに配列を使用できないことがわかりました。

たとえば、これは私にエラーを与えるでしょう

int fly[5];
cout << fly[4] << endl;

また、設定値がない要素を印刷すると、エラーが発生します。

int fly[5];
fly[2] = 1;
cout << fly[4] << endl;

ここで、配列の1つの要素に、配列の初期化で任意の数を指定するとわかりました。次に、残りの要素が0に設定されます。

したがって、このコードは0を出力します

int fly[5] = {15};
cout << fly[4] << endl;

なぜこれが起こるのですか。誰か説明できますか?

4

3 に答える 3

4

これは、C++言語標準が発生するはずだと言っているために発生します。標準では、これは賢明な動作であり、大きな配列を初期化する必要がある場合に多くの入力を節約できるため、発生するはずだとされています。

最初のいくつかの例では、これらの配列要素の値は何でもかまいませんが、「エラーを発生させる」べきではないという点で、未定義の動作を生成します。(十分に賢いコンパイラーは警告を出すかもしれません。)

于 2012-07-22T22:46:50.070 に答える
2

まず、最初の2つの例でエラーが発生する保証はありません。そうでない場合は、未定義の動作でコンパイルおよび実行されます。最後のものは明確に定義された動作をします。配列のすべての要素に値を指定しない場合、残りはデフォルト値(この場合は0)で初期化されます。

于 2012-07-22T22:46:33.197 に答える
0

配列を中括弧で初期化し、初期化子が短すぎる場合、欠落している要素は値で初期化されます。などのプリミティブ型のint場合、これはゼロ初期化を意味します(つまり、初期値はゼロです)。たとえばint a[100] = {};、すべてゼロの配列を取得すると言うことができます。ただし、整数は特別なものではなく、これはデフォルトで構成可能なクラスタイプでも同様に機能します。

最初の2つの例は、初期化されていない変数を読み取っているため、未定義の動作を構成します。

于 2012-07-22T23:11:50.647 に答える