隱式轉換與explicit關鍵字

2021-07-30 23:43:33 字數 571 閱讀 7482

class person

person(const int age)

};int main()

上述**能夠正常執行。

class person

person(const int age)

person(const int age, int b = 0)

};int main()

上述**不能正常執行,生成可執行程式時,會報錯:無法從int轉換到person。

也就是說,編譯器不能進行隱式轉換。因為,編譯器不知道是呼叫person(const int age),還是呼叫person(const int age,int b=0)。

將person(const int age)前加explicit關鍵字修飾:

class person

explicit person(const int age)

person(const int age, int b = 0)};

告知編譯器person(const int age)不進行隱式轉換,則編譯器只能呼叫person(const int age,int b=0),進行隱式轉換。

explicit關鍵字關閉隱式型別轉換

explicit student const std string n name a scores n explicit student int n name nully scores n student doh hommm 10 doh 5 如果鍵入的是doh,而不是doh 0 省略了關鍵字exp...

explicit 隱式類型別轉換

c 隱式類型別轉換 c primer 中提到 可以用 單個形參來呼叫 的建構函式定義了從形參型別到該類型別的乙個隱式轉換。這裡應該注意的是,可以用單個形參進行呼叫 並不是指建構函式只能有乙個形參,而是它可以有多個形參,但那些形參都是有預設實參的。那麼,什麼是 隱式轉換 呢?上面這句話也說了,是從 建...

隱式類型別轉換以及explicit

先有如下建構函式版本 class sales item sales item std istream is 原本的成員函式same isbn 接收乙個sales item物件作為實參,判斷兩個物件是否對應的是同一本書。但是 string null book 9 99 9999 item.same i...