変換コンストラクター は、
関数指定子 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 は、型変換コンストラクターを持っていません。
コピー・コンストラクターは、変換コンストラクターです。
関連参照