0

重複の可能性:
コンストラクターでの初期化、ベストプラクティス?
初期化子リストを使用する利点は?

ポイントクラスでコンストラクターを定義するには、次の2つの方法があります。

class Point
{
public : 
    Point(double X,double Y):x(X),y(Y){}

Private : 
double x,y;


}

別の方法 :

class Point
{
public : 
 Point(double X,double Y)
{    
   x= X;
   y = Y;

}

Private : 
double x,y;


}

どちらが優れているのか、そしてその理由を知りたいのですが、最初のケースでコピーctorを使用することはありますか?それぞれが好ましいところはどこですか?例で説明できる人はいますか?Rgds、Softy

4

3 に答える 3

3

可能な場合は初期化リストを使用してください。この特定のケースでは違いはありませんが、習慣になります。

PODタイプの場合、メンバーは2回初期化されないため、パフォーマンス的には同じです。非POD型はコンストラクター本体に入る前に初期化されるため、初期化子リストではなくc-torの本体で行うと、2回初期化されます。

constメンバーと参照は、初期化子リストで初期化する必要があります。繰り返しますが、あなたのケースには当てはまりません。

于 2012-06-03T09:32:02.950 に答える
0

2 番目のバージョンはデータ メンバーへの割り当てを行いますが、最初のバージョンはデータ メンバーを指定された値に初期化します。ここでは最初のバージョンが優先されます。double の場合はほとんど違いがないかもしれませんが、余分な操作を実行する構造を好む理由はまったくありません。データ メンバーが double ではなく、構築するのにコストがかかる型である場合は、デフォルトでそれらを構築してから値を代入するというペナルティを支払うことになります。

例:

struct ExpensiveToConstruct { .... };

struct Foo {
  Foo() {
    // here, x has already been default constructed
    x = SomeValue; // this is an assignment to the already constructed x.
  }
  ExpensiveToConstruct x;
};

struct Bar {
  Bar : x(SomeValue) {
    // only the constructor has been called. No assignemt.
  }
  ExpensiveToConstruct x;
};
于 2012-06-03T09:35:01.763 に答える
-1

ctor で初期化リストを使用することをお勧めします。その方が効率的です。2番目の方法では、ctorはメンバーデータをデフォルト値1stで2回初期化し、ctorでステートメントを呼び出します。

さらに、const または参照メンバーの場合、init リストで初期化する必要があり、ctor で初期化することはできません。

于 2012-06-03T09:36:51.490 に答える