1つの仮引数をとるコンストラクタを持つクラス。
class Test { int num; public: Test(int x) { num = x; } }
オブジェクトの初期化を私は次のように書いている。
Test obj(10);
これを次のように書くこともできる。
Test obj = 10;
これは自動的に上の書き方へと変換される。これが黙示的なコンストラクタ変換。さらに次のような記述もできる。
Test obj(10); obj = 10;
あたかも変数の代入のように見えるが、これも黙示的な変換が行われている。
この自動的な変換を行われないようにするにはコンストラクタにexplicitを付ける。
class Test { int num; public: explicit Test(int x) { num = x; } };
こうすると自動的な変換が行われないので、Test obj = 10; という書き方はコンパイルエラーとなる。