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