explicit指定子は引数付きのコンストラクタに指定して使用します。コンストラクタが暗黙的な利用を禁止し、明示的にしか呼び出せないようにするものします。
class A {
public:
A(int);
};
のようなクラスAがあったとしよう。
A a;
a = 1;
のようなプログラムがあったとき、変数aに1を代入しているようなコードに見えます。が、実際にはA(int)、つまり、Aのコンストラクタが暗黙的に呼び出され、それをaに代入するという処理になります。コンストラクタA(int)のこのような使われ方を防ぎたいとき、explicit指定子を指定します。explicitが指定されたとき、上と同じような処理をさせるコードは下のように書かなければならないことになります。
A a;
a = A(1);
コメント