關於C 中的explicit關鍵字

2021-05-28 09:04:19 字數 556 閱讀 2817

explicit,和建構函式一起使用.

explicit   constructor指明建構函式只能顯示使用,目的是為了防止不必要的隱式轉化.

舉個例子:

有這樣一段**:

class   a

; int   test(const   a&)   //   乙個應用函式

test(2);   //   正確

過程是這樣的:   編譯器知道傳的值是int而函式需要的是a型別,但它也同時知道呼叫a的建構函式將int轉換成乙個合適的a,所以才有上面成功的呼叫.換句話說,編譯器處理這個呼叫時的情形類似下面這樣:

const   a   temp(2);             //   從2產生乙個臨時a物件

test(temp);           //   呼叫函式

如果**寫成如下樣子:

class   a

; int   test(const   a&)   //   乙個應用函式

test(2);   //   失敗,不能通過隱式型別轉換將int型別變數構造成成a型別變數

關於C 中的explicit關鍵字

關於c 中的explicit關鍵字 在c 中,explicit關鍵字是用來修飾類的建構函式的。含有被該關鍵字修飾過的建構函式的類,將不能進行隱式型別轉換,型別轉換只能顯式進行。並且需要注意的是該關鍵字僅用於類內的建構函式的宣告上。例如 include class ball ball int x 0,...

c 中explicit關鍵字

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

c 中的explicit關鍵字

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