C 中的explicit關鍵字介紹

2021-09-03 01:48:39 字數 708 閱讀 5884

c++中的關鍵字explicit主要是用來修飾類的建構函式,被修飾的建構函式的類,不能發生相應的隱式型別轉換,只能以顯示的方式進行型別轉換。類建構函式預設情況下宣告為隱式的即implicit。

隱式轉換即是可以由單個實參來呼叫的建構函式定義了乙個從形參型別到該類型別的隱式轉換。編譯器在試圖編譯某一條語句時,如果某一函式的引數型別不匹配,編譯器就會嘗試進行隱式轉換,如果隱式轉換後能正確編譯,編譯器就會繼續執行編譯過程,否則報錯。

explicit關鍵字只能用於類內部的建構函式宣告上,而不能用在類外部的函式定義(函式實現)上,它的作用是不能進行隱式轉換;explicit關鍵字作用於單個引數的建構函式,如果建構函式有多個引數,但是從第二個引數開始,如果各引數均有預設賦值,也可以應用explicit關鍵字。

當建構函式只有乙個引數時,會進行自動隱式轉換,當構造函式引數個數超過或等於兩個時自動取消隱式轉換,當只有乙個必須輸入的引數,其餘的為有預設值的引數時使用explicit也起作用。

一般只將有單個引數的建構函式宣告為explicit,而拷貝建構函式不要宣告為explicit。

explicit關鍵字只能對使用者自己定義的物件起作用,不對預設建構函式起作用。此關鍵只能夠修飾建構函式。無引數的建構函式和多引數的建構函式總是顯示呼叫,這種情況在建構函式前加explicit無意義。

當不希望進行自動型別轉換時用explicit,標準庫的許多建構函式都是explicit的。

explicit.hpp:

c 中explicit關鍵字

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

c 中的explicit關鍵字

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

c 中的explicit關鍵字

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