2012-04-13 3 views
1

可能性の重複:
Why should I prefer to use member initialization list?変数を初期化し、オブジェクトを構築する際に変数を割り当てるために、内部的にどのコンパイラが行いますか?

クラスAは、メンバ変数iを持っています。私はオブジェクトの作成中に初期化または割り当てることができます。

A)

class A { 
     int i; 
    public: 
     A(int _i) : i(_i){} 
    } 

B初期化する)を割り当てる

class A { 
     int i; 
    public: 
     A(int _i) : { i = _i} 
    } 

私の質問これら2アプローチの基本的な違いは何かありますか?

+0

'int'のような単純なPODタイプの場合は?何もない。 –

+1

同じ質問ではありませんが、興味があるかもしれません:http://stackoverflow.com/questions/926752/why-should-i-prefer-to-use-member-initialization-list – Corbin

+0

@Corbinはい、それは同じではありません質問をしていますが、これはかなり完全に答えています。短いバージョン:Aはメンバクラスの初期化の方が優れており、 'const'メンバを初期化する唯一の方法です。 – trutheality

答えて

2

違いは、クラス内でiを初期化するためにC++メカニズムが使用されていることです。ケース(A)はコンストラクタによって初期化され、ケース(B)は代入演算子(または代入演算子が定義されていない場合はコピーコンストラクタ)を使用します。

ほとんどのC++コンパイラは、「普通の古いデータ」型のintを使用しているため、この特定の例とまったく同じコードを生成します。 iがクラスタイプの場合は、大きな違いがあります。

+0

この時点でのオブジェクトは作成されていないので、コピーコントラまたは代入演算子はここでは使用できません。 – user966379

+0

@ user966379 - 私はAだけではなく、iのコンストラクタまたは代入演算子を参照していました。 'i'は' int'型なので、クラス全体の準備ができているかどうかにかかわらず、クラスの特定のメンバを初期化するときに、 'int'のコンストラクタまたは代入演算子が使用されます。 –

関連する問題