explicit 意思是明确的,清楚的。
源代码如下:
#include <iostream>
using namespace std;class Test1
{
public:
Test1(int n)
{
m_Name = n;
}
~Test1()
{
}
private:
int m_Name;
};
class Test2
{
public:
explicit Test2(int n)
{
m_Name = n;
}
~Test2()
{
}
int m_Name;
};
int main()
{
Test1 test1 = 1;//正确
Test1 test11= 11; //正确
//Test2 test2 =2 ; 错误
system("pause");
return 0;
}
新建一个Win32控制台空项目,添加一个.cpp文件,将上述代码拷贝其中运行即可。
总结:
Test1类可以 Test1 test1 = 1;//正确,但是对于构造函数加了explicit的Test2类就不可以。
Test1的构造函数带一个int类型的参数,Test1 test1 = 1;代码会隐式转换成调用Test1的这个构造函数。而Test2的构造函数被声明为explicit(显式),这表示不能通过隐式转换来调用这个构造函数,因此会出现编译错误。
话外:
在C++中,一个参数的构造函数,承担了两个角色。1.是个构造器;2.是个默认且隐含的类型转换操作符。