隱式類型別轉換以及explicit

2021-06-09 01:32:59 字數 530 閱讀 5337

先有如下建構函式版本:

class sales_item

sales_item(std::istream &is); }

原本的成員函式same_isbn()接收乙個sales_item物件作為實參,判斷兩個物件是否對應的是同一本書。

但是 string null_book="9-99-9999"

item.same_isbn(null_book);也是成立的,因為進行了隱式的類型別轉換,使用string型別的null_book(通過預設建構函式)建立了乙個臨時的物件,然後用該臨時物件作為引數傳遞給same_isbn()函式。

以上這種就成為類型別的隱式轉換。可以通過explicit標識來防止進行隱式類型別轉換。

class sales_item

explicit sales_item(std::istream &is);//注意explicit只能出現在型別的申明中,在之後類外進行定義時,explicit關鍵字不能夠再出現。 }

如此一來,item.same_isbn(null_book)將是錯誤的。

隱式類型別轉換

c primer 中有這麼一句話 可以用單個實參來呼叫的建構函式定義了從形參型別到該型別的乙個隱式轉換。這麼解釋 比如有個類a的物件a的成員函式的引數應該是類a的物件,但是把乙個別的型別b的物件b傳進去了,而且這個物件b的型別恰好是a的單引數構造函式引數型別,這時系統就用這個b自作聰明的建立了乙個類...

隱式類型別轉換

c primer 中有這麼一句話 可以用單個實參來呼叫的建構函式定義了從形參型別到該型別的乙個隱式轉換。這麼解釋 比如有個類a的物件a的成員函式的引數應該是類a的物件,但是把乙個別的型別b的物件b傳進去了,而且這個物件b的型別恰好是a的單引數構造函式引數型別,這時系統就用這個b自作聰明的建立了乙個類...

C 類型別隱式轉換

隱式類型別轉換 可以用單個實參來呼叫的建構函式定義了從形參型別到該型別的乙個隱式轉換。c primer 首先要單個實參,你可以把建構函式colour的預設實參去掉,也就是定義乙個物件必須要兩個引數的時候,檔案編譯不能通過。以上只是將內建型別轉換為自定義型別 過載double,int 將使用者自定義資...