c++中, 乙個引數的
建構函式(或者除了第乙個引數外其餘引數都有預設值的多參建構函式), 承擔了兩個角色。 1 是個
構造器 ,2 是個預設且隱含的型別轉換操作符。(注:只能修飾單個引數的建構函式或者除了第乙個引數外其他引數都有預設值的多參建構函式)
所以, 有時候在我們寫下如 aa = bb, 這樣的**, 且恰好bb的型別正好是aa單引數構造器的引數型別, 這時候
編譯器就自動呼叫這個構造器, 建立乙個aaa的物件。
在某些情況下, 卻違背了我們(程式設計師)的本意。 這時候就要在這個構造器前面加上explicit修飾, 指定這個構造器只能被明確的呼叫/使用, 不能作為型別轉換操作符被隱含的使用。
explicit建構函式是用來防止隱式轉換的。請看下面的**:
class
a
//普通建構函式
private
:
int
num;
};
class
b
//explicit(顯式)建構函式
C 的explicit關鍵字
c 的explicit關鍵字 c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下面...
C 的explicit關鍵字
c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 class myclas...
C 的explicit關鍵字
帶單一引數的建構函式在預設情況下隱含乙個轉換操作符,請看下面的 class c void f 編譯器重新編輯上述例子 如下 c 5 被編譯器轉換成下面這個樣子 c temp 5 例項化乙個臨時物件,c temp 用 賦值 temp.c c temp 的析構函式被啟用 在很多情況下,這個轉換是有意的,...