explicit
カテゴリ
構文
explicit <single-parameter constructor declaration>
説明
通常、単一引数のコンストラクタを伴うクラスを生成すると、引数の型に一致する値を代入することができます。 値は代入先のクラス型のオブジェクトに自動的に(暗黙に)渡されます。 このような暗黙の変換は、explicit キーワードを使ってクラスのコンストラクタを宣言することにより回避できます。 クラスのすべてのオブジェクトには、そのクラス型で値を代入しなければなりません。 その他の代入はコンパイラ エラーとなります。
次に示すクラスのオブジェクトには、コンストラクタ型またはクラス型に適した値を代入することができます。
class X { public: X(int); X(const char*, int = 0); };
次は正しい代入文です。
void f(X arg) { X a = 1; X B = "Jessie"; a = 2; }
一方、次のクラスのオブジェクトにはクラス型に適した値だけが代入可能です。
class X { public: explicit X(int); explicit X(const char*, int = 0); };
explicit コンストラクタでは、次の代入文の値を代入先のクラス型に変換する必要があります。
void f(X arg) { X a = X(1); X b = X("Jessie",0); a = X(2); }