explicit关键字
参考文章:https://www.cnblogs.com/rednodel/p/9299251.html
功能:用于单参数构造函数,使构造函数只能显式构造。
多参数构造函数只能显式构造
class test {
public:
test(int a) { this->a = a; }
private:
int a;
};
test x=3; //ok 编译器进行了隐式转换
test x(3);//ok 编译器进行了显式
隐式转换:
在C++中, 如果的构造函数只有一个参数时, 那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象. 也就是说 “test x=3;” 这段代码, 编译器自动将整型转换为test类对象, 实际上等同于下面的操作:
加入explicit关键字后:
class test {
public:
explicit test(int a) { this->a = a; }
private:
int a;
};
test x=3;//erro 不存在从int到test的适当构造函数
test x(3);//ok