explicit用来声明只有一个确定参数的对象
class test{
public:
explicit test(int a); //单个参数
explicit test(int a, int b = 5); //只有一个参数待确定
};
explicit是为了防止隐式类型转换 比如这样
test ctx = 5;
除此之外 还可以禁止隐式的拷贝构造
explicit test(test&);
test a(2);
test b = a; //相当于 test b = test(a) 隐式拷贝构造 引发编译错误