c++のexplicit指定子(explicit specifier)の使い方をググってもいい感じの情報にはたどり着けなかったのでメモ。 c++03まで #クラスのコンストラクタの宣言で explicit をつけると、次の2つの制限が適用される。 コピー初期化ができない暗黙の型変換ができないそれぞれコードで示すと以下のようになる。 class Test { public: explicit Test(int) {} }; void hoge(Test test) {} ina main() { // <コピー初期化> Test test1(0); // OK Test test2 = 0; // NG: intでコピー初期化はできない Test test3 = Test(0); // OK // </コピー初期化> // <暗黙の型変換> hoge(Test(0)); // OK hoge