明確 (C++)
は 1 個のパラメーターを暗黙の型変換を自動的に実行する C++ コンストラクター。コンストラクターのパラメーターは文字列ポインターを要求する場合などint を渡すとコンパイラは文字列 int をポインターに変換する必要があるコードを追加します。ただしこの動作は常に自動起動しないことがあります。
コンストラクター宣言が暗黙の型変換を回避するに explicit を追加できます。これによりコードを正しい型パラメーターを強制するか適切なパラメーターを型にキャストします。つまりキャストをコードに明確に表現されていない場合エラーが発生します。
explicit のキーワードを明示的に適用されたオブジェクトを構築する内部クラスのコンストラクターの宣言のみです。
使用例
次のプログラムをコンパイル エラーになります。コードが暗黙の型変換を実行しますが explicit のキーワード はになります。このエラーを解決するにはexplicit のキーワードを削除しg のコードを調整します。
// spec1_explicit.cpp
// compile with: /EHsc
#include <stdio.h>
class C
{
public:
int i;
explicit C(const C&) // an explicit copy constructor
{
printf_s("\nin the copy constructor");
}
explicit C(int i ) // an explicit constructor
{
printf_s("\nin the constructor");
}
C()
{
i = 0;
}
};
class C2
{
public:
int i;
explicit C2(int i ) // an explicit constructor
{
}
};
C f(C c)
{ // C2558
c.i = 2;
return c; // first call to copy constructor
}
void f2(C2)
{
}
void g(int i)
{
f2(i); // C2558
// try the following line instead
// f2(C2(i));
}
int main()
{
C c, d;
d = f(c); // c is copied
}
explicit されている複数の引数を持つコンストラクターを宣言するとそのようなコンストラクターが暗黙の型変換に含めることはできないため効果はありません。ただしexplicit は引数の 1 つがが既定値を持つコンストラクター以外は複数の引数をすべてがある場合です。