3

私は最近、私のアプリケーションのバグを修正しました。問題は、スタック上にあるオブジェクトのフィールドが初期化されていないままだったということでした。

オブジェクトには、次のタイプのクラス宣言がありました:

struct A{
    int somefield, someotherfield;
    A(): someotherfield(0) {}
}

A var;また、(関数のように) ローカル変数を宣言するときは、somefield初期化されていないため、それを読み取るとランダムな値が返されます。

コンストラクターの初期化リストに表示されないクラスのフィールドは、合成された自明なコンストラクター (int の場合はゼロ値) によって常に初期化されると確信していました。明らかに私は間違っています。

では、暗黙的なフィールドの初期化に関する一般的なルールは何ですか?

4

1 に答える 1

4
  • クラスと構造体はコンストラクターによって初期化されます
  • 基本型 int double char short ... は初期化されておらず、乱数が含まれています
  • ポインタは初期化されておらず、ランダムな位置を指しています
  • クラスまたは構造体の配列により、各要素がそのコンストラクターによって初期化されます
  • 基本型またはポインターの配列はランダムです。
于 2012-06-04T08:53:52.540 に答える