次のように仮定します。
struct POD1 { int a; };
struct POD2 : POD1 { int b; };
int main() {
POD2 p2 = POD2();
return 0;
}
が定義された後、両方ともp2.a
0p2.b
になりますか? p2
基本的に、値の初期化規則が POD 型の基本クラスにも適用されるかどうかはわかりません。
次のように仮定します。
struct POD1 { int a; };
struct POD2 : POD1 { int b; };
int main() {
POD2 p2 = POD2();
return 0;
}
が定義された後、両方ともp2.a
0p2.b
になりますか? p2
基本的に、値の初期化規則が POD 型の基本クラスにも適用されるかどうかはわかりません。
POD2 p2();
それはあなたが期待することをしませんが、p2
引数をとらず、 を返す名前で関数を宣言しますPOD2
。
さて、少し異なるケースは次のようになります。
POD2 p2 = POD2();
式の右側は、値が初期化POD2()
された一時的なオブジェクトの作成を表しています[5.2.3/2]。ユーザー定義コンストラクターを持たないユーザー定義型の値の初期化はゼロ初期化[8.5/7] であり、その型のゼロ初期化はメンバーとベースのそれぞれをゼロ初期化します [8.5/5] 両方のメンバーを保証しますは 0 です。