C 顯式建構函式

2021-08-21 16:49:07 字數 788 閱讀 6922

如果c++類的其中乙個建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作:將該建構函式對應資料型別的資料轉換為該類物件。

如下面的例子:

#include using namespace std;

class b

//explicit b(int _data):data(_data){}

};int main()

在程式的第11行:b temp = 5,因為b中存在乙個只有乙個引數的建構函式,且引數型別也是int,所以會將將int型別的5轉換為b型別的物件,就是使用了隱式建構函式。

從上面例子來看,這樣並沒有什麼壞處,反而使用起來比較方便,但是有的時候可能並不需要這種隱式轉換,比如下面的例子:

class b

//本意是預先分配n個位元組給字串

b(const char *pstring){} // 用c風格的字串p作為初始化值

};int main()

上述的寫法中:

為了避免這種錯誤的發生,我們可以宣告顯示的轉換,使用explicit關鍵字:

class b

};

class b

b(const char *pstring){}

};

則類似於b temp = 5這種寫法編譯不能通過,需要寫 b temp(5)或者 b temp = b(5)。

參考:

C 顯式建構函式 翻譯

簡介 建構函式的確能使你的類變的簡單優雅,它也是乙個基本的函式,可以由編譯器以預設的方式提供給你,即預設建構函式。在c 中,如果你只寫一行 class a 編譯器會提供給你乙個預設的 無引數的建構函式,並伴隨乙個析構函式,乙個拷貝建構函式 copy constructor 乙個拷貝複製操作符 cop...

C 中的顯式建構函式

以兩個c 的小例子來說明怎樣通過使用顯式建構函式來防止隱式轉換。class clxcomplex double getreal const double getimage const private double m dreal double m dimage 我們知道,下面的3行 是等價的 clx...

C 中的顯式建構函式

c 中的顯式建構函式 以兩個c 的小例子來說明怎樣通過使用顯式建構函式來防止隱式轉換。class clxcomplex double getreal const double getimage const private double m dreal double m dimage 我們知道,下面的...