explicit

提供: Appmethod Topics
移動先: 案内検索

キーワード(アルファベット順):インデックス への移動


カテゴリ

C++ 固有キーワード

構文

explicit <単一引数のコンストラクタ宣言>

説明

通常、単一引数のコンストラクタを伴うクラスを生成すると、引数の型に一致する値を代入することができます。値は代入先のクラス型のオブジェクトに自動的に(暗黙に)渡されます。このような暗黙の変換は、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);
}

関連項目