c 的explicit關鍵字的作用

2021-09-16 21:28:40 字數 625 閱讀 8933

【作用】:關鍵字explicit,可以阻止不應該允許的經過轉換建構函式進行的隱式轉換的發生。宣告為explicit的建構函式不能在隱式轉換中使用。

首先了解一下隱式轉換:可以用單個實參來呼叫的建構函式定義了從形參型別到該類型別的乙個隱式轉換。

c++中, 乙個引數的建構函式(或者除了第乙個引數外其餘引數都有預設值的多參建構函式), 承擔了兩個角色。 1 是個構造器 2 是個預設且隱含的型別轉換操作符。

請看下面的**:

class test1

//普通建構函式

private:

int num;

};class test2

//explicit(顯式)建構函式

private:

int num;

};int main()

test1的建構函式帶乙個int型的引數,**19行會隱式轉換成呼叫test1的這個建構函式。而test2的建構函式被宣告為explicit(顯式),這表示不能通過隱式轉換來呼叫這個建構函式,因此**20行會出現編譯錯誤。

普通建構函式能夠被隱式呼叫。而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 的析構函式被啟用 在很多情況下,這個轉換是有意的,...