1. 程式人生 > >隱式型別轉換及explicit建構函式

隱式型別轉換及explicit建構函式

C++語言中,某些型別之間有關聯,即可以相互轉換。這些型別轉換有時是自動執行的,無須程式設計師的介入,有時甚至不需要程式要了解。被稱為“隱式轉換”。

在下面這些情況下,編譯器會自動地轉換運算物件的型別:

1.在大多數表示式中,比int型別小的整型值首先提升為較大的整數型別。

2.在條件中,非布林值轉換成布林值。

3.初始化過程中,初始值轉換成變數的型別;在賦值語句中,右側運算物件轉換成左側運算物件的型別。

4.如果算術運算或關係運算的運算物件有多種型別,需要轉換成同一種類型。

5.函式呼叫。

6.陣列轉化成指標。

7.指標的轉換:常量整數值0或者字面值nullptr能轉換成任意指標型別。指向任意非常量的指標能轉換成

void*;指向任意物件的指標能轉換成const void*

8.轉換成布林型別:存在一種從算術型別或指標型別向布林型別自動轉換的機制。值為0轉換成FALSE;否則轉換成ture

9.轉換成常量:允許將指向非常量型別的指標轉換成指向相應的常量型別的指標,對於引用也是這樣。

10.類型別定義的轉換:如果建構函式只接受一個實參,則它實際上定義了轉換為此型別的隱式轉換機制,有時我們把這種建構函式稱作轉換建構函式。在要求隱式轉換的程式上下文中,我們可以通過將建構函式宣告為explicit加以阻止。被宣告為explicit的建構函式通常比其non-explicit兄弟更受歡迎,因為它們禁止編譯器執行非預期的型別轉換。除非我有一個好理由允許建構函式被用於隱式型別轉換,否則應該把它宣告為

explicit