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
;// ok:允許 static_cast 的顯式轉換
doa(1)
;// ok:允許從 int 到 a 的隱式轉換
if(a1)
;// ok:使用轉換函式 a::operator bool() 的從 a 到 bool 的隱式轉換
bool a6(a1);
// ok:使用轉換函式 a::operator bool() 的從 a 到 bool 的隱式轉換
bool a7 = a1;
// ok:使用轉換函式 a::operator bool() 的從 a 到 bool 的隱式轉換
bool a8 =
static_cast
<
bool
>
(a1)
;// ok :static_cast 進行直接初始化
b b1(1
);// ok:直接初始化
b b2 =1;
// 錯誤:被 explicit 修飾建構函式的物件不可以複製初始化
b b3
;// ok:直接列表初始化
b b4 =
;// 錯誤:被 explicit 修飾建構函式的物件不可以複製列表初始化
b b5 =
(b)1
;// ok:允許 static_cast 的顯式轉換
dob(1)
;// 錯誤:被 explicit 修飾建構函式的物件不可以從 int 到 b 的隱式轉換
if(b1)
;// ok:被 explicit 修飾轉換函式 b::operator bool() 的物件可以從 b 到 bool 的按語境轉換
bool
b6(b1)
;// ok:被 explicit 修飾轉換函式 b::operator bool() 的物件可以從 b 到 bool 的按語境轉換
bool b7 = b1;
// 錯誤:被 explicit 修飾轉換函式 b::operator bool() 的物件不可以隱式轉換
bool b8 =
static_cast
<
bool
>
(b1)
;// ok:static_cast 進行直接初始化
return0;
}
#include
using namespacestd;
class
person
// explicit修飾建構函式
explicit
person
(int h)
void
display()
};void
main()
關於explicit關鍵字
今天在看乙個源程式的時候用到了explicit關鍵字。在網上查詢了一下該關鍵字的作用。沒有進行試驗,只是整理了下 1.explicit主要和建構函式一起使用.2.當explicit修飾建構函式的時候,對於呼叫該建構函式進行進行 隱式 轉換的 將不會通過 3.解除explicit的方式,就是使用強制轉...
C 顯示轉換關鍵字explicit詳解
想要理解顯示轉換,首先得明白與之對應得隱式轉換是什麼。隱式轉換關鍵字是implicit,意思是隱藏的,類建構函式預設情況下即宣告為implicit 隱式 且不顯示出來,因此常常被我們所忽略。下面詳細講解隱式轉換得過程 假如乙個類a的建構函式是a int i 則在變數宣告的時候,既用a a 1 又可以...
C 的explicit關鍵字
c 的explicit關鍵字 c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下面...