天天看點

C++ Explicit Constructors(顯式構造函數)

  C++ 為類(Class)提供了許多預設函數。如果自己沒有申明,編譯器會為我們提供一個copy構造函數、一個copy assignment操作符和一個析構函數。此外,如果沒有申明任何構造函數,編譯器會為我們申明一個default構造函數。很像下面的Empty類:

   就像Effective C++說的,如果不想使用編譯器自動生成的函數,就應該明确拒絕。

1.C++中的隐式構造函數

  如果c++類的其中一個構造函數有一個參數,那麼在編譯的時候就會有一個預設的轉換操作:将該構造函數對應資料類型的資料轉換為該類對象。

2.Explicit Constructors顯式構造函數

  為了避免上面提到的隻有一個參數的構造函數采用的預設轉換操作,在構造函數前,使用Explicit 關鍵字修飾即可。

3.如下面的例子:

  程式第11行,将int轉換為B類型的對象,就是使用了隐式構造函數。因為B中存在一個隻有一個參數的構造函數,且參數類型也是int。

  如果在構造函數前加explicit ,表示為顯示構造函數,則第11行編譯不能通過。因為這時,就沒有隐式構造函數啦。

繼續閱讀