web-dev-qa-db-ja.com

C ++クラスメンバーのデフォルト値は何ですか

C++の構造体のメンバーとクラスのメンバーのデフォルト値は何ですか?これらのルールはどのように異なりますか(たとえば、classes/structs/primitives/etc間)?デフォルト値に関するルールが異なる状況はありますか?

51
leeeroy

この点に関して、C++では構造体とクラスの間に違いはありません。これらはすべてクラスタイプと呼ばれます。

クラス型のメンバーには、一般的なデフォルト値はありません。クラスメンバーが決定的な値を取得するには、initializedである必要があります。

  • メンバー自体のデフォルトコンストラクター
  • 囲んでいるクラスのコンストラクタ初期化子リスト
  • 囲んでいるクラスのオブジェクトの明示的に指定された初期化子(値の初期化および集約初期化子による初期化を含む)。

さらに、静的ストレージ期間を持つすべてのオブジェクトは、プログラムの起動時にゼロで初期化されます。

上記の場合を除き、クラスメンバにはデフォルト値がなく、予測不可能なガベージ値が最初に含まれます。

43
AnT

ええ、あります。デフォルトのコンストラクタでオブジェクトを初期化し、括弧を使用すると、PODメンバーはゼロで初期化されます。

someClass * p = new someClass();
15
Hans Passant