1、explicit
关键字,用于修饰构造函数,防止构造函数隐式转换,用于增强代码明确性,提高代码可读性。
缺点:由于explicit关键字阻止了构造函数隐式转换,所以需要额外代码进行类型转换。
class MyClass
{
public:MyClass(std::string name) { name_ = name;}
private:std::string name_;
};class MyClass1
{
public:explicit MyClass1(std::string name) { name_ = name;}
private:std::string name_;
};void Fun(MyClass c)
{//...
}void Fun1(MyClass c)
{//...
}int main(int argc, char *argv[])
{std::string name = "ZhangSan";Fun(name); //正确Fun1(name); //编译错误Fun1(MyClass1(name)); //正确MyClass1 obj0("ZhangSan"); //直接初始化,正确MyClass1 obj1{"ZhangSan"}; //列表初始化,正确MyClass1 obj2 = "ZhangSan"; //复制初始化,编译错误MyClass obj3 = "ZhangSan"; //正确return 0;
}