explicit復習
後輩にexplicitを説明してもすぐにはピンと来ない様子だったので、具体例を作った。
#include <iostream> class A{ private: int a; public: explicit A(int x): a(x) {} void print() const { std::cout<<a<<std::endl; } }; void func(const A hoge){ hoge.print(); } int main(){ A b(0); func(b); // 普通の呼び出し方。 func(4); // explicitが無いとこの呼び出しが通り、コーディングミスの温床になる。 }
このように型変換の話なので、1変数以外のコンストラクタにはexplicitは不要。当然、同クラスを引数に取るコンストラクタにも不要。