C++ explicit 关键字简介

explicit 关键字

防止类的初始化的时候进行隐式转换。

class MyClass {
	string m_s;
	int m_a, m_b;
public:
	MyClass(string const& s, int const& a=10, int const& b=10):m_s(s),m_a(a), m_b(b){}
};

int main() {
	MyClass c = string("abc");  //这里会进行隐式转换:MyClass c = MyClass(string("abc"))
    MyClass cc = {string("abc"), 11}; //这也会进行隐式转换 MyClass c = MyClass(string("abc"),11)
	return 0;
}

以上代码都是可以通过编译的.但是在构造函数MyClass前加上exolicit,编译就会报错。因为一些项目里,隐式转换经常会造成一些难以察觉的bug,所以写类的构造函数的时候最好用上explicit。当然,用上explicit之后还是可以进行显示转换的。MyClass c = MyClss(string("ABC")); 这个是合法的。

原文地址:https://www.cnblogs.com/rookiezjz/p/12357869.html