explicit(顯示)關鍵字

2021-10-07 08:02:23 字數 1717 閱讀 2663

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 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下面...