用於抑制建構函式的自動隱式轉換。
structa //
轉換建構函式
a(int, int) //
轉換建構函式 (c++11)
operator
bool() const };
struct
b
explicit b(int, int
)
explicit
operator
bool() const };
intmain()
; //
ok:直接列表初始化選擇 a::a(int, int)
a a4 = ; //
ok:複製列表初始化選擇 a::a(int, int)
a a5 = (a)1; //
ok:顯式轉型進行 static_cast
if (a1) ; //
ok:a::operator bool()
bool na1 = a1; //
ok:複製初始化選擇 a::operator bool()
bool na2 = static_cast(a1); //
ok:static_cast 進行直接初始化 //
b b1 = 1;
//錯誤:複製初始化不考慮 b::b(int)
b b2(2); //
ok:直接初始化選擇 b::b(int)
b b3 ; //
ok:直接列表初始化選擇 b::b(int, int)
//b b4 = ;
//錯誤:複製列表初始化不考慮 b::b(int,int)
b b5 = (b)1; //
ok:顯式轉型進行 static_cast
if (b2) ; //
ok:b::operator bool()
//bool nb1 = b2;
//錯誤:複製初始化不考慮 b::operator bool()
bool nb2 = static_cast(b2); //
ok:static_cast 進行直接初始化
}
C 學習筆記 explicit關鍵字
c 中的explicit 關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 class mycla...
C 學習筆記 explicit關鍵字
explicit關鍵字用於宣告必須使用強制轉換來呼叫的使用者定義的型別轉換運算子。例如,在下面的示例中,此運算子將名為 fahrenheit 的類轉換為名為 celsius 的類 must be defined inside a class called farenheit public stati...
C 學習筆記之explicit關鍵字
explicit關鍵字的作用是用來修飾類的建構函式,表明該建構函式是顯式的,禁止單引數建構函式的隱式轉換。假如沒有explicit class myclassa class myclassb myclassa obj1 myclassb obj2 obj2 obj1 實際上發生如下隱式轉換 mycl...