百度explicit,他会这样说:表示这个函数不能被隐式转换。但我还是不得它的真意。
但是,我们可以看个例子就明白了它的用法和它所防止出现的错误。
1 class Test1
2 {
3 public:
4 Test1(int n) { num = n; } //普通构造函数
5 private:
6 int num;
7 };
8
9 class Test2
10 {
11 public:
12 explicit Test2(int n) { num = n; } //explicit(显式)构造函数
13 private:
14 int num;
15 };
16
17 int main()
18 {
19 Test1 t1 = 12; //隐式调用其构造函数, 成功
20 Test2 t2 = 12; //编译错误,不能隐式调用其构造函数
21 Test2 t3(12); //显示调用成功
22 return 0;
23 }
看最后3个构造函数就知道了
(1)19行的,构造成功; 虽然代码中没有传入参数,但是它隐式调用了Test1(int n) { num = n; }
(2)20行的,错误;explicit 关键字不允许隐式的转换,必须如21行那样明确传入参数