隱式型別轉換 與 隱式型別轉換操作符

2021-09-08 20:33:50 字數 805 閱讀 4259

1、考慮下面的情況:有個person類,內部有個age欄位。正常情況下,定義和賦值為:

person p = person(8);

p = person(9);

但是有個傢伙很懶,他想這麼寫:

person p = 8;

p =9;

這樣寫也是可以的,因為編譯器知道你的意圖,執行的時候會進行一次隱式型別轉換,中間適配乙個臨時物件。這就是隱式型別轉換,但這樣寫不好,因為語義不通。要避免這種情況,使用explicit,這樣編譯器就會曝出錯誤。

2、現在在考慮下面的需求:判斷p的年齡是否大於5,正常的寫法是:

if(p.getage()>5)

但是,上面的傢伙還是很懶,想直接這樣寫:

if(p>5)

這是情況,有兩種解決辦法,一種是讓p轉化為對應的age,一種是讓5轉化為person。

a、前一種辦法,使用隱式型別轉換操作符 operator int()

這時候,需要提供乙個隱式型別轉換操作符,

person::operator int()

b、後一種辦法,提供乙個操作符過載,如下:

bool operator>(const person& lhs,const person& rhs)

注意:如果兩種方法同時提供,編譯器會報錯,因為編譯器不知道應該使用哪乙個型別轉換。

補充說明:操作符過載,本質上是方法,和getname一樣,operator+ 對應於方法名。而隱式型別轉換操作符可以認為是乙個特殊的成員方法,這個成員方法為operator int(),可以認為這個方法以operator開頭,返回值是int,沒有方法名,沒有形參。

隱式型別轉換

c 本身對內建型別定義了各種隱式的型別轉換,這種內建的型別轉換在可能導致精度 丟失的情況下編譯器會發出警告,但當我們定義自己的型別時,提供各種隱式轉換往往 是弊大於利的 至少在我編寫過的 中很少用到 隱式的型別轉換可分為 其它型別到本型別,本型別到其它型別兩種.第一種通過單變數 可呼叫之建構函式進行...

隱式型別轉換

c語言中有以下四種情況會進行隱式轉換 1 算術運算子中,低型別轉換為高型別。2 賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值。3 函式呼叫傳遞引數時,系統將實參轉換為形參的型別後,賦給形參。4 函式有返回值是,系統將表達值型別轉換為返回值型別。進行算術運算時,不同型別的數必須轉換...

隱式型別轉換

1.c的整型算數運算總是至少以預設型型別的精度來進行的。為了獲得這個精度,表示式的字元和短整型運算元在使用之前被轉換為普通整型,這種轉換叫 整型提公升 下面我們來看個例子 char a 2 char b 127 char c a b 求c 多少?首先char為1個位元組 而且是有符號的 char最大...