C++中的explicit关键字

来源:互联网 发布:淘宝联盟之类的软件 编辑:程序博客网 时间:2024/05/16 17:25
[html] view plain copy
  1. class T{  
  2. public:  
  3.         int a;  
  4.         int b;  
  5.         T();  
  6.         ~T();  
  7.         T(int iFirst, int iSecond = 4);  
  8.   
  9. };  
  10.   
  11. T():a(0),b(0)  
  12. {  
  13. }  
  14. T::T(int iFirst, int iSecond):a(iFirst), b(iSecond)  
  15. {  
  16. }  
  17. int main(int argc, char* argv[])  
  18. {  
  19.   
  20.         T q;            //调用T()  
  21.         T w(12,34);     //调用T(int ,int)  
  22.         T u(22);        //调用T(int, int)  
  23.         T l=89;         //调用T(int, int)    
  24.         //上行代码执行了隐式转换, 89-> T temp(89) 然后 T l =temp,拷贝构造  
  25.   
  26.     return 0;  
  27. }  

隐式转换总是在我们没有察觉的情况下悄悄发生,除非有心所为,隐式转换常常是我们所不希望发生的。通过将构造函数声明为explicit(显式)的方式可以抑制隐式转换。也就是说,explicit构造函数必须显式调用。

发生隐式转换,除非有心利用,隐式转换常常带来程序逻辑的错误,而且这种错误一旦发生是很难察觉的。
原则上应该在所有的构造函数前加explicit关键字,当你有心利用隐式转换的时候再去解除explicit,这样可以大大减少错误的发生。