Explicit单词的含义是:外在的, 清楚的, 直率的,显式的,Explicit关键字的目的是防止隐式的构造,只能进行显式的的构造。
举例说明:
#include <iostream>
using namespace std;
class A{
public:
Explicit A(int i){//构造函数1
}
A(string str,int i=10){//构造函数2
}
};
int main()
{
A a1(1); //调用构造函数1
A a2("test"); //调用构造函数2
A a3("test",12); //调用构造函数2
A a4 = 1; //为构造函数1加上explicit则出错,不加则正确。此时错误。
A a5 = "test"; //为构造函数2加上explicit则出错,不加则正确。此时正确。
return 0;
}
如同任何基本数据类型的定义和初始化有两种情况一样:
Int i= 10;
int i(10);
自定义数据类型(struct 和class)的初始化也有隐式构造和显式构造两种方式:
ClassA a=10;
ClassA a(10);
Explicit关键字的作用就是防止隐式的构造(第一种)。
Explicit关键字的应用领域很小,只用在构造函数上,且只在例子中的两种情况下使用:
1:只有一个参数的构造函数;A(int i){}
2:构造函数有多个参数,但只有一个参数没有默认值。A(string str,int i=10,int j=1){}