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

posted @ 2017-03-24 16:23  奇热行  阅读(161)  评论(0)    收藏  举报