C 中explicit關鍵字的使用

2021-10-08 05:46:33 字數 1205 閱讀 9944

首先, c++中的explicit關鍵字只能用於修飾只有乙個引數的類建構函式, 它的作用是表明該建構函式是顯示的, 而非隱式的, 跟它相對應的另乙個關鍵字是implicit, 意思是隱藏的,類建構函式預設情況下即宣告為implicit(隱式).

class demo

; /* 建構函式1 */

demo(double a) /* 示例**2 */

; demo(int a, double b) {}; /* 示例**3 */

~demo() {};

void func(void) {};

private:

int value1;

double value2;

};

現在沒有加關鍵字explicit,

建構函式1沒有引數,無法進行型別轉換!

建構函式2有乙個引數,可以進行型別轉換,

如:

demo test; test = 12.2;
建構函式3有兩個引數,且無預設值,故無法使用型別轉換!

上面的**中, "demo test= 12.2;" 這句為什麼是可以的呢? 在c++中, 如果的建構函式只有乙個引數時, 那麼在編譯的時候就會有乙個預設的轉換操作:將該建構函式對應資料型別的資料轉換為該類物件. 也就是說 "demo test = 12.2;" 這段**, 編譯器自動將整型轉換為demo類物件, 實際上等同於下面的操作:

demo test(12.2);  

或 demo test(12.2);

demo temp = test;

給建構函式加上 explicit關鍵字,它現在就不支援demo test = 12.8;這種寫法

總結:explicit關鍵字的作用就是防止類建構函式的隱式自動轉換。被宣告為explicit的建構函式通常比其non-explicit兄弟更受歡迎。因為它們禁止編譯器執行非預期(往往也不被期望)的型別轉換。除非我有乙個好理由允許建構函式被用於隱式型別轉換,否則我會把它宣告為explicit,鼓勵大家遵循相同的政策。

參考:

c 中explicit關鍵字

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

c 中的explicit關鍵字

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

c 中的explicit關鍵字

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