C explicit禁止單參建構函式隱式呼叫

2021-08-28 06:49:37 字數 755 閱讀 5186

c++中單引數建構函式是可以被隱式呼叫的,主要有兩種情形會隱式呼叫單引數建構函式:

(1)同型別物件的拷貝構造;即用相同型別的其它物件來初始化當前物件。

(2)不同型別物件的隱式轉換。即其它型別物件隱式呼叫單引數拷貝建構函式初始化當前物件。比如a a=1;就是隱式轉換,而不是顯示呼叫建構函式,即a a(1);。像a(1)這種涉及型別轉換的單引數建構函式,又被稱為轉換建構函式(converting constructor)。

單引數建構函式的隱式呼叫示例如下:

#include using namespace std;

class myint

int getmyint() const

private:

int dnum;

};int main()

explicit myint(const myint& objmyint)

int getmyint() const

private:

int dnum;

};int main()

當然,多形參建構函式是沒有建構函式的隱式轉換,所以沒必要宣告explicit。

[1]陳剛.c++高階高階教程[m].武漢:武漢大學出版社,2008:1.17explicit的用法

[2]改善c++程式的150個建議[m].李健:提防隱式轉換帶來的麻煩

[3]深入理解c++中的explicitkeyword

018 C explicit建構函式

英 k spl s t 美 k spl s t adj.明確的,清楚的 直言的 詳述的 不隱瞞的 看到上面的英文解釋,我們應該就知道explicit建構函式是什麼意思了 顯式的建構函式!一 隱式建構函式 如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型...

C explicit建構函式例項解析

按照程式設計客棧c語言預設規定,只有乙個引數的建構函式也定義了乙個隱式轉換,將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 class string string s1 hello ok 隱式轉換,等價於string s1 string hello 但是有的時候可能會不需要這種隱式轉換,如...

構造方法 空參構造 有參構造

1.給物件的資料或屬性進行初始化 2.特點 一 方法名與類名相同 二 沒有返回值型別,連void都沒有 三 沒有返回值 四 構造方法不能用物件呼叫,在建立物件時,系統會自動呼叫 public class play class person public person string name,int ...