1 隱式轉(zhuǎn)換
1.1隱式轉(zhuǎn)換情況:
(1) 在條件語句中,會自動把非布爾值轉(zhuǎn)換成布爾值;
(2) 在變量初始化和賦值的過程中,右側(cè)對象類型會自動轉(zhuǎn)換成左側(cè)對象類型
(3) 在算術(shù)運(yùn)算中,所有變量會先統(tǒng)一成同一數(shù)據(jù)類型,在進(jìn)行計(jì)算
1.2 隱式轉(zhuǎn)換的規(guī)則:
(1) 小整形(bool、char、unsigned char、short、unsigned short)在算術(shù)運(yùn)算中遇到比int所占空間不小的類型變量時(shí)候,小整形變量會先轉(zhuǎn)換成int類型變量;
(2)如果含有小整形變量算術(shù)運(yùn)算中,先進(jìn)行(1),然后, 在算術(shù)運(yùn)算中所占空間小的變量會自動轉(zhuǎn)換成式子中最大空間的類型,例如 3.14+'a'中 'a'會自動轉(zhuǎn)換成int,再從int轉(zhuǎn)換成double
(3)如果無符號類型與有符號類型進(jìn)行運(yùn)算時(shí)候,如果無符號類型變量所占空間>=有符號類型變量所占空間,有符號類型會自動轉(zhuǎn)換成無符號類型類型;另外一種情況有符號類型變量所占空間>無符號類型變量所占空間,如果無符號類型能自動轉(zhuǎn)換有符號類型就轉(zhuǎn)換,如果不能,那么會將有符號類型轉(zhuǎn)成無符號類型。
char cval;
int ival;
unsigned int ui;
float fval;
double dval;
cout << sizeof(cval) << " c: " << sizeof(ival) << " i: " << sizeof(ui) << " ui: "
<< sizeof(fval) << " f: " << sizeof(dval) << " d:"<< endl;
cout << sizeof(cval = 'a'+3) << endl;
cout << sizeof (fval=(ui-(ival * 1.0))) << endl;
cout << ui*fval << endl; // 4.39882e-032 類型 float
cout << sizeof(ui*fval) << endl;
cout << sizeof(dval=ui*fval) << endl; // float-> double
return 0;
2 顯示轉(zhuǎn)換
強(qiáng)制類型轉(zhuǎn)換形式
cast-name<type>(表達(dá)式) 其中:cast-name包括 static_cast、dynamic_cast、const_cast中的一種,type:要轉(zhuǎn)換的類型
(1) static_cast: 是針對普通變量強(qiáng)制類型變量類型
(2) const_cast:是改變對象的底層const