深入理解C 中的explicitkeyword

2021-09-09 01:40:32 字數 1578 閱讀 5797

深入理解c++中的explicitkeyword

[email protected]

c++中的explicitkeyword僅僅能用於

修飾僅僅有乙個引數

的類建構函式, 它的作用是表明該建構函式是顯示的, 而非隱式的, 跟它相相應的還有乙個keyword是implicit, 意思是隱藏的,類建構函式預設情況下即宣告為implicit(隱式)。

關於explicitkeyword。先看看msdn上的解釋:

. an explicit constructor cannot take part in implicit conversions. it canonly be used to explicitly construct an object

從上面的解釋能夠看到。 explicitkeyword的作用:禁止隱式呼叫類內的單引數建構函式,這主要包含例如以下三層意思:

(1)該keyword僅僅能用來修飾類內部的建構函式

(2)禁止隱式呼叫拷貝建構函式

(3)禁止類物件之間的隱式轉換

首先,來看看隱式轉換,例如以下例:

class cexplict

cexplict(const cexplict& other)

friend void printexplicit(const cexplict& cx);

private:

bool is_explict;

};void printexplicit(const cexplict& cx)

cexplict(const cexplict& other)

friend void printexplicit(const cexplict& cx);

private:

bool is_explict;

};void printexplicit(const cexplict& cx)

至此,程式就能夠正常執行,並且進一步新增了程式的可讀性。

總結:

(1)explicitkeyword僅僅需用於類內的單引數建構函式前面。

因為無引數的建構函式和多引數的建構函式總是顯示呼叫,這樣的情況在建構函式前加explicit無意義。

(2)假設想禁止類a物件被隱式轉換為類b物件,可在類b中使用keywordexplicit,即定義這種轉換建構函式

explicit b(a a)

explicit b(const a &a)

google的c++規範中提到explicit的長處是能夠避免不合時宜的型別變換,缺點無。

所以google約定全部單引數的建構函式都必須是顯示的,僅僅有極少數情況下拷貝建構函式能夠不宣告稱explicit。比如作為其它類的透明包裝器的類。

除非我有乙個好理由同意建構函式被用於隱式型別轉換,否則我會把它宣告為explicit,鼓舞大家遵循同樣的政策。

kezunhai

出處:

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

C 中深入理解dynamic cast

一 指標型別的dynamic cast 如果一條dynamic cast語句的轉換目標是指標型別並且轉換失敗了,會返回乙個空指標,則判斷條件為0,即為false 如果轉換成功,指標為非空,則判斷條件為非零,即true。這樣做可以確保型別轉換和條件檢查在同一條表示式中完成 if derived pd ...