- ベストアンサー
初期化リストとコンストラクタでの代入について
class AAA { int a; AAA():a(10) {} }; class AAA { int a; AAA(){a=10;} }; 上記のようにコンストラクタで初期化を行う場合、 初期化リストを使用するのと代入を使用するのでは、 速度の面からいえば優劣はあるのでしょうか? VC++などでは最適化されどちらも同じバイナリが 生成されるということですが、これは本当でしょうか? 参考書籍名などもおしえていただければ助かります。 よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
プログラミング言語C++第3版P299には class Person{ string name; string address; } Person::Person(const string& n, const string& a):name(n) { address = a; } のコードに対して、nameはnのコピーによって初期化されているのに対し、addressは空文字列で初期化されてから、aのコピーを代入されている。 とあります。 初期設定リストを使用しないと、クラスのメンバとしてコンストラクタ以前に初期化されるのに対して、初期設定リストを使用すると、そこでのみ初期化されるということでしょう。ですから厳密に言うと初期設定リストの方が初期化が1回のみになりますので優なんでしょうね。 VC++がすべて初期設定リストで最適化するかどうかは分かりませんが。。