コンストラクターによる変換

C++変換コンストラクター は、 関数指定子 explicit の指定なしでは宣言されない、単一パラメーター・コンストラクターです。 コンパイラーは、変換コンストラクターを使用して、オブジェクトを第 1 パラメーターの型から、 変換コンストラクターのクラスの型に変換します。 次の例は、このことを示しています。

class Y {
  int a, b;
  char* name;
public:
  Y(int i) { };
  Y(const char* n, int j = 0) { };
};
 
void add(Y) { };
 
int main() {
 
  // equivalent to
  // obj1 = Y(2)
  Y obj1 = 2;
 
  // equivalent to
  // obj2 = Y("somestring",0)
  Y obj2 = "somestring";
 
  // equivalent to
  // obj1 = Y(10)
  obj1 = 10;
 
  // equivalent to
  // add(Y(5))
  add(5);
}

上記の例には、次の 2 つの変換コンストラクターがあります。

コンパイラーは、上記で説明したような型を、explicit キーワードを使用して宣言されたコンストラクターで暗黙的に変換しません。 コンパイラーは、new 式、static_cast 式と明示キャスト、 および基底とメンバーの初期化で明示的に宣言されたコンストラクターだけを使用します。 次の例は、このことを示しています。

class A {
public:
  explicit A() { };
  explicit A(int) { };
};
 
int main() {
  A z;
//  A y = 1;
  A x = A(1);
  A w(1);
  A* v = new A(1);
  A u = (A)1;
  A t = static_cast<A>(1);
}

コンパイラーは、これが暗黙の型変換なので、 ステートメント A y = 1 を許可しません。 クラス A は、型変換コンストラクターを持っていません。

コピー・コンストラクターは、変換コンストラクターです。

関連参照

IBM Copyright 2003