C++中Explicit关键字的理解

来源:互联网 发布:淘宝中年女服装长袖 编辑:程序博客网 时间:2024/06/05 22:37
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,Explicit主要是应用于这种情况,避免出现因为隐式转换出现二意性。如下实例说明:
[cpp] view plain copy
 print?
  1. #include <iostream>  
  2. #include <string>  
  3.   
  4. class mystring {  
  5. public:  
  6.     explicit mystring(const char* p);  
  7.     explicit mystring(int n);  
  8. };  
  9.   
  10. mystring::mystring( const char* p )  
  11. {  
  12.     std::cout << p << std::endl;  
  13. }  
  14.   
  15. mystring::mystring( int n )  
  16. {  
  17.     std::cout << n << std::endl;  
  18. }  
  19.   
  20. int main(int argc, char *argv[], char *env[])  
  21. {  
  22.     const char *c = "Hello World!!!";  
  23.     int i = 4;  
  24.   
  25.     mystring mystr1 = mystring(c);  
  26.     mystring mystr2 = mystring(i);  
  27.   
  28.     // 构造函数加上关键字explicit,下面两句编译都过不去  
  29.     // 因为此时这种隐式转换不允许  
  30.     // 所以为了避免二意义性,单参数的构造函数建议要加上explicit  
  31.     mystring mystr3 = c;    // 编译不通过,不允许隐式的转换  
  32.     mystring mystr4 = i;    // 编译不通过,不允许隐式的转换  
  33.   
  34.     return 0;  
  35. }  
0 0
原创粉丝点击