被忽略的 explicit 關鍵字

2021-06-22 18:37:48 字數 337 閱讀 9303

所有單引數的建構函式都必須是explicit的,這是為了防止後台悄悄進行的型別轉換,舉個例子如下:

定義乙個類:

class intcell

private:

int intvalue;

};對類做如下例項化:

intcell obj;

obj=37;

如果不加上explicit關鍵字的話,這將順利通過編譯,原因是c++通過隱式型別轉換,構造了乙個臨時物件,臨時物件的intvalue值是37,

然後再把這個臨時物件賦給obj;

如果加上explicit 那麼這種情況編譯器就匹配不了=兩邊的型別了 ,就會編譯不通過。

關於explicit關鍵字

今天在看乙個源程式的時候用到了explicit關鍵字。在網上查詢了一下該關鍵字的作用。沒有進行試驗,只是整理了下 1.explicit主要和建構函式一起使用.2.當explicit修飾建構函式的時候,對於呼叫該建構函式進行進行 隱式 轉換的 將不會通過 3.解除explicit的方式,就是使用強制轉...

explicit(顯示)關鍵字

explicit 使用 struct a operator bool const struct b explicit operator bool const void doa a a void dob b b intmain ok 直接列表初始化 a a4 ok 複製列表初始化 a a5 a 1 o...

C 的explicit關鍵字

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