0

固定サイズの配列を宣言するときに、これらがゼロで初期化され、すべてのポインターが0であるかどうかが気になります。私は言うことができfoo* arr[1000][1000]、すべてのエントリが0であることがわかります。しかし、これが信頼できるものであるかどうかはわかりません。私は言うことができますfoo* arr[1000][1000] = {}が、このdouble配列はクラスのメンバー変数であり、必要がなければコンストラクターにdoubleforループを持たせたくありません...

4

2 に答える 2

4

アレイの割り当て方法によって異なります。

グローバルまたはグローバルの場合static、コンテンツはすべて0に初期化されます。ローカル変数の場合、コンテンツは何にも初期化されません。

したがって、配列はメンバー変数であるため、自動的に0に初期化されることはありません。ただし、コンストラクターの初期化リストを使用して、すべての変数をゼロに初期化できます。

struct A {
    //    VVV   value-initialises the contents of arr
    A() : arr() { }

    double arr[x][y];
};
于 2012-07-18T16:57:23.957 に答える
3

それは文脈に依存します。配列が名前空間レベルで定義されている場合、静的初期化によってすべてのポインターがnullに設定されます。関数スコープまたはクラスのメンバーとして定義されている場合、そのような保証はありません。

クラスのメンバーであるため、正しく初期化されないため、手動で初期化する必要があります。これを行うには、初期化リストに追加arr()します。ポインタでmemsetあるため、1回の呼び出しで配列全体を0に設定するために使用できます(これも同様に効率的です)が、これはPOD型に対してのみ機能することに注意してください。

于 2012-07-18T16:57:16.017 に答える