明示的指定子 (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);