這個是整理的所得,原文連接http://topic.csdn.net/t/20050301/13/3815012.htmlhtml
能夠參考http://blog.csdn.net/fornormandy/archive/2004/08/19/79512.aspx。ide
- class A{
- int a;
- public:
- explicit A(int i):a(i){}
- };
- int main()
- {
- A a(1),b(2);
- a = b;
- a = 2; //錯誤,不能隱式轉換。若是沒有explicit這個關鍵字,則是能夠的。
- return 0;
- }
最驚奇的是能夠直接這樣去聲明一個對象,A a=2,看來對構造函數的執行時機和隱式轉化理解的不深。函數
關於構造函數,拷貝構造函數,賦值操做符使用和隱式轉化的聯繫和區別:spa
- A b(1);
- A a = b; //這樣才調用拷貝構造函數
- A c = 2; //調用帶int參數(有且僅有一個非缺省參數)的構造函數。
- 若是是這樣:
- A a(1),b(2),c(3);
- a = b; //調用operator=()
- a = 2; //調用operator=(),由於缺省的operator=的參數類型是(const &),
- //因此這裏有一個隱式轉換,構造出一個臨時對象A(2),就從2轉換到了A(2)。
- //operator=函數裏處理的就是臨時 對象A(2)。
- //若是重載爲A &operator=(int),a=b不會出錯.
- //由於缺省的A & operator=(const A&)會起做用
C++仍是博大精深,感受好些不會,不過仍是碰一點,學一點來得印象深入。.net