先看一下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...