小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C++ 類(lèi)型轉(zhuǎn)換

 恰恰恰2009 2009-05-25
C++ 類(lèi)型轉(zhuǎn)換
2008-07-24 11:05
 
************ 一、隱式類(lèi)型轉(zhuǎn)換 *************
C++語(yǔ)言為內(nèi)置類(lèi)型定義了一套隱式類(lèi)型轉(zhuǎn)換。隱式類(lèi)型轉(zhuǎn)換有如下情形:

1、在混合類(lèi)型的算術(shù)表達(dá)式中,所有類(lèi)型會(huì)向最寬的類(lèi)型轉(zhuǎn)換。這被稱(chēng)為算術(shù)類(lèi)型轉(zhuǎn)換。
    算數(shù)轉(zhuǎn)換包括兩種形式:
    a、如果可能,所有類(lèi)型都將提升為最寬的類(lèi)型已避免數(shù)據(jù)損失;
    b、只要表達(dá)式中包含的都是整數(shù)類(lèi)型,則均先提升小于int的整型為int再進(jìn)行其他轉(zhuǎn)換或計(jì)算;

2、在賦值表達(dá)式中,被賦值的類(lèi)型(‘=’左邊的操作數(shù))將作為目標(biāo)轉(zhuǎn)換類(lèi)型。
    這時(shí)候由于目標(biāo)轉(zhuǎn)換類(lèi)型不一定是整個(gè)表達(dá)式中最寬的數(shù)據(jù)類(lèi)型,因此可能會(huì)產(chǎn)生數(shù)據(jù)損失,因此一般編譯器會(huì)給出個(gè)warning。
    賦值表達(dá)式有多種表現(xiàn)形式,如下:
    a、直接的’=‘賦值語(yǔ)句;
    b、將表達(dá)式作為參數(shù)傳遞給函數(shù)時(shí),這時(shí)候函數(shù)的形參可以看作‘=’左邊的操作數(shù),實(shí)際參數(shù)作為‘=‘右邊的操作數(shù)
    c、函數(shù)體return語(yǔ)句將表達(dá)式返回式,這時(shí)候函數(shù)名作為’=‘左邊的操作數(shù),返回的表達(dá)式為右邊的操作數(shù)。

3、類(lèi)型大小關(guān)系:
    unsigned > signed;
    long double > double > float > integral types;
    unsigned long > long / int > bool,unsigned char, signed char,char,w_char, short int;
   
    注:unsigned short int與int的大小關(guān)系與機(jī)器有關(guān), unsigned int與long的大小關(guān)系與機(jī)器有關(guān);

當(dāng)int不足以代表所有unsigned short int值時(shí),兩者均轉(zhuǎn)化為unsigned int;當(dāng)long不足以代表所有unsigned int值時(shí),兩者均轉(zhuǎn)換為unsigned long。

    枚舉類(lèi)型用能代表所有枚舉值的最小的整型類(lèi)型存儲(chǔ)。
   

************ 二、顯式類(lèi)型轉(zhuǎn)換 *************

語(yǔ)法:const_name<type>(expr);

1、const_cast
     去除表達(dá)式的const/volatile屬性。一般用于去除指針的const屬性。
  
    例如:
    const int a = 5;
    const int * ptr = &a;
    int * ptr1 = const_cast<int *>(ptr);      // okay!!
    *ptr1 = 8;
    cout << *ptr1 << endl;
    cout << *ptr << endl;

    int b = const_cast<int>(a);   //error C2440: 'const_cast' : cannot convert from 'const int' to 'int'  
    cout << b << endl;     
}

2、static_cast
    標(biāo)準(zhǔn)轉(zhuǎn)換基本上都可以用static_cast來(lái)實(shí)現(xiàn)。具體有如下用法:
    a、將編譯器執(zhí)行的隱式轉(zhuǎn)換顯示化;
    b、或?qū)oid*轉(zhuǎn)換為顯式類(lèi)型的指針;
    c、將算術(shù)值轉(zhuǎn)換為枚舉值;
    d、將基類(lèi)(或基類(lèi)指針/引用)轉(zhuǎn)化為派生類(lèi)(或派生類(lèi)指針/引用)
    其中,b、c、d存在潛在的危險(xiǎn);a存在潛在的數(shù)據(jù)損失。

3、reinterpret_cast
    對(duì)操作數(shù)進(jìn)行低級(jí)別的bit模式的重翻譯,其正確性完全由編程者掌控,編譯器不負(fù)任何責(zé)任。
    推薦使用reinterpret_cast來(lái)實(shí)現(xiàn)所有指針的顯示轉(zhuǎn)換操作。

4、舊風(fēng)格的顯示轉(zhuǎn)換語(yǔ)法:
    a、C++函數(shù)風(fēng)格:type_name(expr)
    b、C語(yǔ)言風(fēng)格:(type_name)expr
    舊的顯示轉(zhuǎn)換風(fēng)格,可以實(shí)現(xiàn)所有上述三種顯示轉(zhuǎn)換方式的功能。但由于其潛在的危險(xiǎn)更難于跟蹤,因此不推薦使用。

5、dynamic_cast

************************ 三、自定義類(lèi)型轉(zhuǎn)換 **************************
自定義的類(lèi)型轉(zhuǎn)換有兩種,一種是通過(guò)"類(lèi)型轉(zhuǎn)換函數(shù)" (hi.baidu.com/cosmicocean/blog/item/4b5e47af46f678fdfaed5038.html)
另一種是通過(guò)" 單參數(shù)的構(gòu)造函數(shù)" 。

實(shí)際程序中,用戶(hù)可以顯示的指明某一個(gè)轉(zhuǎn)換所采用的類(lèi)型轉(zhuǎn)換方式,若編譯器允許這種轉(zhuǎn)換(內(nèi)置允許或用戶(hù)自定義了該轉(zhuǎn)換方式),則進(jìn)行轉(zhuǎn)換操作。用戶(hù)沒(méi)有顯示指明時(shí),編譯器將根據(jù)的情況選擇是否能進(jìn)行隱式轉(zhuǎn)換。下面闡述隱式轉(zhuǎn)換相關(guān)的內(nèi)容:

實(shí)際程序中,原類(lèi)型需要轉(zhuǎn)換為目標(biāo)類(lèi)型時(shí),有內(nèi)置轉(zhuǎn)換(lval->rval / promotion / standard conversion)則直接轉(zhuǎn)換;否則,若類(lèi)型轉(zhuǎn)換函數(shù)轉(zhuǎn)換的類(lèi)型就是目標(biāo)類(lèi)型,則編譯器會(huì)隱式的調(diào)用該函數(shù)進(jìn)行轉(zhuǎn)換;否則,編譯器將結(jié)合用戶(hù)自定義轉(zhuǎn)換與標(biāo)準(zhǔn)轉(zhuǎn)換序列,以達(dá)到目標(biāo)類(lèi)型。
最后一種情況實(shí)際上是如下形式的轉(zhuǎn)換序列:
Standard Conversion Sequence ->User-defined Conversion ->Standard Conversion Sequence
(注意,序列中只能包含一個(gè)用戶(hù)自定義的轉(zhuǎn)換)
有時(shí)候,可以有不同的轉(zhuǎn)換序列能實(shí)現(xiàn)原類(lèi)型到目標(biāo)類(lèi)型的轉(zhuǎn)換,編譯器需要挑選出最好的一個(gè)序列進(jìn)行隱式類(lèi)型轉(zhuǎn)換。

1、類(lèi)型轉(zhuǎn)換函數(shù)
    含有類(lèi)型轉(zhuǎn)換函數(shù)的轉(zhuǎn)換序列為:User-defined Conversion->Standard Conversion Sequence。

2、構(gòu)造函數(shù)
    含有構(gòu)造函數(shù)的轉(zhuǎn)換序列為:Standard Conversion Sequence->User-defined Conversion.

3、最佳選擇
    不論含有上述哪種用戶(hù)自定義的轉(zhuǎn)換,若有多個(gè)序列可以完成轉(zhuǎn)換,標(biāo)準(zhǔn)轉(zhuǎn)換序列的等級(jí)將決定選擇那種轉(zhuǎn)換;若幾個(gè)序列優(yōu)先級(jí)相同,則該轉(zhuǎn)換為ambiguous,編譯器無(wú)法完成轉(zhuǎn)換。
 
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多