C++相談室 part123 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0330デフォルトの名無しさん
2016/03/10(木) 03:41:17.30ID:mxNsUMFnB() で 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 は不定となってしまっていた。
http://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
■ このスレッドは過去ログ倉庫に格納されています