C++ expilict關鍵字使用詳解

 這個是整理的所得,原文連接http://topic.csdn.net/t/20050301/13/3815012.htmlhtml

能夠參考http://blog.csdn.net/fornormandy/archive/2004/08/19/79512.aspxide

  
  
  
  
  1. class   A{  
  2. int   a;  
  3. public:  
  4. explicit       A(int   i):a(i){}            
  5. };  
  6.  
  7. int   main()  
  8. {  
  9. A   a(1),b(2);  
  10. a   =   b;  
  11. a   =   2;       //錯誤,不能隱式轉換。若是沒有explicit這個關鍵字,則是能夠的。  
  12. return   0;  

最驚奇的是能夠直接這樣去聲明一個對象,A a=2,看來對構造函數的執行時機和隱式轉化理解的不深。函數

關於構造函數,拷貝構造函數,賦值操做符使用和隱式轉化的聯繫和區別:spa

  
  
  
  
  1. A   b(1);  
  2. A   a   =   b;   //這樣才調用拷貝構造函數  
  3. A   c   =   2;   //調用帶int參數(有且僅有一個非缺省參數)的構造函數。  
  4.  
  5. 若是是這樣:  
  6. A   a(1),b(2),c(3);  
  7. a   =   b;   //調用operator=()  
  8. a   =   2;   //調用operator=(),由於缺省的operator=的參數類型是(const   &),
  9. //因此這裏有一個隱式轉換,構造出一個臨時對象A(2),就從2轉換到了A(2)。
  10. //operator=函數裏處理的就是臨時   對象A(2)。  
  11.  //若是重載爲A   &operator=(int),a=b不會出錯.
  12. //由於缺省的A   &   operator=(const   A&)會起做用  

C++仍是博大精深,感受好些不會,不過仍是碰一點,學一點來得印象深入。.net

相關文章
相關標籤/搜索