C++中explicit关键字的用法
explicit用来防止由构造函数定义的隐式转换。
语法和用途:
1 //a.h 2 #ifndef A_H 3 #define A_H 4 5 6 class A 7 { 8 public: 9 explicit A(int var1); 10 A(char *var2); 11 }; 12 13 #endif // A_H 14 //a.cpp 15 #include "a.h" 16 #include<iostream> 17 using namespace std; 18 A::A(int var1) 19 { 20 cout<<var1<<endl; 21 } 22 23 A::A(char *var2) 24 { 25 cout<<var2<<endl; 26 } 27 //main.cpp 28 #include <iostream> 29 #include"a.h" 30 using namespace std; 31 32 int main() 33 { 34 A a1(1);//可以 35 A a2("x");//可以 36 A a3=1;//不可以,因为构造器有explicit修饰,阻止隐式转换发生 37 A a4="y";//可以构造器进行隐式转换 38 return 0; 39 }
google的c++规范中提到explicit的优点是可以避免不合时宜的类型变换。
参考 http://www.cnblogs.com/winnersun/archive/2011/07/16/2108440.html

浙公网安备 33010602011771号