应用篇:explicit声明的构造函数作用
应用篇:explicit声明的构造函数作用
总结
// 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 }
注:
- Test1的构造函数带一个int型的参数,代码19行会隐式转换成调用Test1的这个构造函数。而Test2的构造函数被声明为explicit(显式),这表示不能通过隐式转换来调用这个构造函数,因此代码20行会出现编译错误。
- 普通构造函数能够被隐式调用。而explicit构造函数只能被显示调用。
转载需注明出处
https://blog.csdn.net/qq_49710945/article/details/108599904