C++中Explicit关键字的理解

按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,Explicit主要是应用于这种情况,避免出现因为隐式转换出现二意性。如下实例说明:
[cpp]  view plain  copy
 print ?
  1. #include   
  2. #include   
  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. }  

你可能感兴趣的:(c++/go后台技术栈,c++)