国产探花免费观看_亚洲丰满少妇自慰呻吟_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)。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上虞市| 连云港市| 通山县| 信宜市| 莎车县| 洛浦县| 安宁市| 界首市| 赤峰市| 石城县| 孝昌县| 新源县| 策勒县| 博湖县| 云林县| 梁河县| 凤山市| 兴海县| 淮北市| 库伦旗| 庄浪县| 高唐县| 三河市| 白山市| 海原县| 电白县| 从化市| 甘孜县| 新竹市| 杨浦区| 凤山县| 昭觉县| 高雄市| 永顺县| 郯城县| 常熟市| 高密市| 桂平市| 武义县| 铅山县| 岳池县|