明示的指定子 (C++ のみ)
explicit 関数指定子は、望ましくない暗黙的型変換を制御します。
それは、クラス宣言内のコンストラクターの宣言にだけ使用されます。
例えば、デフォルトのコンストラクターを除いて、
以下のクラスのコンストラクターは、変換コンストラクターです。
class A
{ public:
A();
A(int);
A(const char*, int = 0);
};
以下の宣言は、正しい宣言です。
A c = 1;
A d = "Venditti";
最初の宣言は A c = A(1) に等価です。explicit キーワードを使用してこのクラスのコンストラクターを宣言すると、 前の宣言は正しくなくなります。
例えば、クラスを以下のようなクラスとして宣言する場合、
class A
{ public:
explicit A();
explicit A(int);
explicit A(const char*, int = 0);
};
クラス型の値に一致する値だけを代入できます。
例えば、以下のステートメントは正しくありません。
A a1;
A a2 = A(1);
A a3(1);
A a4 = A("Venditti");
A* p = new A(1);
A a5 = (A)1;
A a6 = static_cast<A>(1);
関連情報