explicit显式转换
explicit是显式转换的意思,一般用于构造函数前,来防止隐式转换。
举个例子
1 class Test1 2 { 3 public: 4 Test1(int num): n(num) 5 { // } 6 ...... 7 private: 8 int n; 9 } 10 class Test2 11 { 12 public: 13 explicit Test2(int num):m(num) 14 { // } 15 private: 16 int m; 17 } 18 19 //调用: 20 Test1 t1 = 14; 21 Test2 t2(14); 22 Test2 t3 = 14;
很明显, t1 和 t2都会编译通过,而t3不行(不能从int 转到 Test2),这就是加了explicit(显式转换)关键字的作用,而像t1那样,程序拿到整数之后第一件事情就是把int类型整数构建一个对象。再然后赋值给t1。
隐式转换这种方式很特别,有时候会做出一些不符合预期的操作,explicit关键字就可以避免这种不符合预期的情况。
ps:在类声明中使用的explicit关键字,不能写在定义中。
原来人类的悲欢并不相通, 我只觉得他们吵闹。