- 330 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 03:41:17.30 ID:mxNsUMFn.net]
- >>308-309
B() で B 型のオブジェクトが値初期化 "value initialize" される。 (8.5 p11) B はユーザー定義のデフォルトコンストラクタを持たないクラス型なので、値初期化のプロセスとして まずゼロ初期化 "zero initialize" され、そのあとデフォルト初期化 "default initialize" される。 (8.5 p8 bullet-2) int 型の B::x がゼロ初期化されると値 0 になる。 (8.5 p6 bullet-1) そのあと B::x がデフォルト初期化されるが、 int 型なので何も行われず 0 のまま。 (8.5 p7 bullet-3) と言う感じで、 C++14 の規格に従うと 0 になる。 C++03 以降だと経路が多少違うものの同じ結果になるけど、古の C++98 では B::x は不定となってしまっていた。 www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#35 MSDN 見る限りだと 2013 で value initialize に対応してそうなんで、 2013 で不定ならバグかな。 https://msdn.microsoft.com/en-us/library/w7wd1177%28v=vs.110%29.aspx https://msdn.microsoft.com/en-us/library/w7wd1177%28v=vs.120%29.aspx
|

|