explicit 關鍵字的用法

2021-05-23 19:22:30 字數 755 閱讀 4381

explicit 關鍵字的用法

只有乙個引數的建構函式在預設情況下隱含乙個轉換操作符,對沒有引數或引數個數大於 1 個的建構函式沒有此問題(看後面的特別說明)

class x

int m_a;

int m_b;

double m_c;

};x::x(int a)

如果做如下呼叫

x x = 10;     //10 被隱式轉化成了 x 物件,其實編譯器編譯後就是呼叫了建構函式 x(int)

double d1 = (double)0.5f;

x x2 = d1;  //d1 被隱式轉化成了 x 物件,其實編譯器編譯後就是呼叫了建構函式 x(double  c)

這裡要格式外說明的是,如果 x(double c) 前有 explicit,而 x(int) 前沒有,則

x x2 = d1; 會呼叫 x(int),而不是自己想像的呼叫 x(double c)

有時我們不需要隱式的轉化,就要用 explicit 限制下,把上面**的 explicit 開啟,則下面的呼叫就非法了,在函式中呼叫如下所示

void f(x x)

{}void g(int i)

void h()

特別要說明的是,如果乙個建構函式的引數為如下形式,也會存在隱式轉換的問題

class y

int m_a;

int m_b;

};總而言之一句,乙個類的建構函式只要用乙個引數能呼叫起來,都存在隱式轉換的問題,其它情況下沒有

關於explicit關鍵字的用法

explicit關鍵字的作用 禁止隱式呼叫類內的單引數建構函式,這主要包括如下三層意思 1 該關鍵字只能用來修飾類內部的建構函式 2 禁止隱式呼叫拷貝建構函式 3 禁止類物件之間的隱式轉換 關於explicit的隱式轉換,例子 class cexplict cexplict const cexpli...

C 關鍵字explicit的用法

explicit是顯示的意思。而且只能修飾建構函式。因為在類的建構函式中,凡是只帶乙個引數的建構函式,都定義了一組隱式轉化 把建構函式型別轉換為該類的型別。比如 class explicit virtual explicit 則 呼叫 explicit e 1 列印 explicit 建構函式 1 ...

C 關鍵字explicit的用法

c 關鍵字explicit,可以阻止不應該允許的經過轉換建構函式進行的隱式轉換的發生,宣告為explicit的建構函式不能在隱式轉換中使用。c 中,帶有乙個形參的建構函式 或者除了第乙個引數外其餘引數都有預設值的多參建構函式 承擔了兩個角色。1 是類的帶參建構函式 2 是預設且隱含的型別轉換操作符。...