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关键字,不能写在定义中。

posted @ 2019-07-25 12:38  jckcoenf  阅读(173)  评论(0编辑  收藏  举报