C 中的explicit關鍵字

2021-09-06 00:23:14 字數 723 閱讀 8469

先看一下msdn上關於explicit關鍵字的解釋

1 該關鍵字只能用來修飾類內部的建構函式

classa;

private

:

intm_i ;

};

但是下面這樣就不對了

classa;

explicit a::a(int

i)

2 該關鍵字能防止隱式轉換

在c++中允許這樣的操作,某個類的建構函式只有乙個引數,假設型別為t,那麼可以進行t到該類的物件的隱式轉換,比如下面的類a的建構函式只有乙個引數,型別為int,那麼就可以直接將乙個int轉換為a類的物件,這種情況可能發生在

classa;

private

:

intm_i ;

};void

func(a a)

int main(void

)

不幸的是,有時這種轉換會造成混淆,所以我們要阻止這種轉換,這就是explicit所做的事情了,用explicit宣告的建構函式不允許做這種型別的轉換。如果試圖轉換,則會遇到下面的編譯錯誤。

classa;

private

:

intm_i ;

};void

func(a a)

int main(void

)

c 中explicit關鍵字

c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的。既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?按照預設規定,只有乙個引數的建構函式也定義了乙個隱式轉換,將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 include using namesp...

c 中的explicit關鍵字

c 中的explicit關鍵字 c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下...

c 中的explicit關鍵字

c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 class myclas...