国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

何時發生隱式類型轉換

2019-11-08 01:51:30
字體:
來源:轉載
供稿:網友
鏈接:https://www.nowcoder.com/test/question/done?tid=6629168&qid=2922#summary來源:牛客網

1. 在混合類型的表達式中,操作數會被轉換為相同類型

int ival; double dval;ival >= dval; // ival converted to double

2. 條件表達式會被轉換為bool類型。

int ival; if (ival) // ival converted to bool while (cin) // cin converted to bool

條件操作符(? :)中的第一個操作數,邏輯非(!)、邏輯與(&&)、邏輯或(||)的操作數都是條件表達式。if、while、do while、以及for的第2個表達式都是條件表達式。

3. 初始化和賦值

int ival = 3.14 // 3.14 converted to int int *ip;ip = 0; // the int 0 converted to a null pointer of type int *

4. 在函數調用時,所傳遞的參數也可能發生隱式類型轉換。

如何轉換

1. 算術轉換

算術轉換保證在執行操作前,將二元操作符的兩個操作數轉換為同一類型,并使表達式的值也具有相同的類型。 算術轉換通常的是做整形提升(integral PRomotion),對于所有比int小的整形,包括char、signed char、unsigned char、short和unsigned short,如果該類型的所有可能的值都能包含在int內,它們就會被提升為int,否則被提升為unsigned int。如果將bool值提升為int,則false轉換為0,true轉換為1。包含short和int類型的表達式,short轉換為int。如果int足以表示所有unsigned short類型的值,則將unsigned short轉換為int,否則兩個操作數均轉換為unsigned int。long和unsigned int的轉換也一樣。只要機器上的long足夠表示unsigned int類型所有的值,就將unsigned int轉換為long,否則兩個操作數都轉換為unsigned long。在32位的機器上,long和int通常用一個字長表示,此時如果表達式包含unsigned int和long,兩者都轉換為unsigned long。

如果表達式包含signed和unsigned int,signed會被轉換為unsigned。如果int 操作數的值恰為負數,其轉換為unsigned int可能會變為一個很大的正數(轉換結果是該負值對unsigned int的取值個數求模)。所以最好避免對int和unsigned int的兩個操作數進行比較。

轉換示例:

2. 其他隱式轉換

(1)數組名轉換為指向其第一個元素的指針

int ia[10]; // array of 10 ints int *ip = ia; // convert ia to pointer to first element

另外,任意數據類型的指針都可轉換為void *,整形數值常量0可以轉換為任意類型指針。

(2)指針值可轉換為bool

如果指針為0,轉換為false,否則轉換為true。

if (cp) // true if pointer cp is not zero

(3)算術類型與bool的轉換

算術類型轉換為bool時,0轉換為false,其他值(包括負值)轉換為true。將bool轉換為算術類型時,true轉換為1,false轉換為0。

(4)轉換與枚舉類型

枚舉類型對象或枚舉成員將自動轉換為整形,其轉換結果可以用于任何需要使用整數值的地方。具體會被轉換為哪種整形,依賴于枚舉成員的最大值和機器。enum對象或枚舉成員至少提升為int,如果int無法表示枚舉成員的最大值,則提升到能表示所有枚舉成員值的、大于int型的最小類型(unsigned int 、long或unsigned long)。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开化县| 霍林郭勒市| 玉龙| 太仓市| 陆川县| 陈巴尔虎旗| 介休市| 五指山市| 桃源县| 罗定市| 祥云县| 菏泽市| 沂南县| 讷河市| 喀喇沁旗| 霞浦县| 礼泉县| 抚顺县| 屏南县| 交城县| 五台县| 林西县| 荆州市| 巩义市| 东乌珠穆沁旗| 开化县| 平遥县| 太谷县| 定州市| 青河县| 株洲市| 伊通| 玉田县| 泰安市| 广德县| 保靖县| 辽宁省| 满洲里市| 都江堰市| 龙井市| 威宁|