欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

新型的類型轉(zhuǎn)換(九)-創(chuàng)新互聯(lián)

   我們之前在 C 語(yǔ)言進(jìn)行類型轉(zhuǎn)換是強(qiáng)制類型轉(zhuǎn)換的,這樣極易出 bug,還不易查找。格式如下:(Type)(Experssion) 或 Type(Experssion),我們來(lái)看個(gè)示例代碼,看看 C 語(yǔ)言中的強(qiáng)制類型轉(zhuǎn)換

為東城等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及東城網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、成都網(wǎng)站建設(shè)、東城網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
#include <stdio.h>

typedef void(PF)(int);

struct Point
{
    int x;
    int y;
};

int main(int argc, char *argv[])
{
    int v = 0x12345;
    PF* pf = (PF*)v;
    char c = char(v);
    Point* p = (Point*)v;
    
    pf(5);
    
    printf("p->x = %d\n", p->x);
    printf("p->y = %d\n", p->y);
    
    return 0;
}

        編譯結(jié)果如下

新型的類型轉(zhuǎn)換(九)

        我們看到直接運(yùn)行段錯(cuò)誤,但是它編譯是通過(guò)的,因此我們?nèi)绻诖笮偷捻?xiàng)目中是難以查找 bug 的。

        在 C 方式的強(qiáng)制類型轉(zhuǎn)換的過(guò)程中,它存在的問(wèn)題:a> 過(guò)于粗暴:任意類型之間都可以進(jìn)行轉(zhuǎn)換,編譯器很難判斷其正確性;b> 難于定位:在源碼中無(wú)法快速定位所有使用強(qiáng)制類型轉(zhuǎn)換的語(yǔ)句。那么強(qiáng)制類型轉(zhuǎn)換在實(shí)際工程中是很難完全避免的!如何進(jìn)行更加安全可靠的轉(zhuǎn)換呢?在 C++ 中出現(xiàn)了新式類型轉(zhuǎn)換,C++ 將強(qiáng)制類型轉(zhuǎn)換分為 4 中不同的類型:a> static_cast;b> const_cast;c> dynamic_cast;d> reinterpret_cast;用法是:xxx_cast<Type>(Expression)。下來(lái)我們分別來(lái)講下這四種新式類型轉(zhuǎn)換的特點(diǎn)及要求

        A、static_cast 強(qiáng)制類型轉(zhuǎn)換

        用于基本類型間的轉(zhuǎn)換;不能用于基本類型指針間的轉(zhuǎn)換;用于有繼承關(guān)系類對(duì)象之間的轉(zhuǎn)換和類指針之間的轉(zhuǎn)換。

        B、const_cast 強(qiáng)制類型轉(zhuǎn)換

        用于去除變量的只讀屬性;強(qiáng)制轉(zhuǎn)換的目標(biāo)類型必須是指針或引用。

        C、reinterpret_cast 強(qiáng)制類型轉(zhuǎn)換

        用于指針類型間的強(qiáng)制轉(zhuǎn)換;用于整數(shù)和指針類型間的強(qiáng)制轉(zhuǎn)換。

        D、dynamic_cast 強(qiáng)制類型轉(zhuǎn)換

        用于有繼承關(guān)系的類指針間的轉(zhuǎn)換;用于有交叉關(guān)系的類指針間的轉(zhuǎn)換;具有類型檢查的功能;需要虛函數(shù)的支持。

        關(guān)于上面講到的有些概念,我們會(huì)在后面進(jìn)行詳細(xì)的介紹,下來(lái)我們以代碼為例進(jìn)行分析

#include <stdio.h>

void static_cast_demo()
{
    int i = 0x12345;
    char c = 'c';
    int* pi = &i;
    char* pc = &c;
    
    c = static_cast<char>(i);
    pc = static_cast<char*>(pi);    // error
}

void const_cast_demo()
{
    const int& j = 1;
    int& k = const_cast<int&>(j);
    
    const int x = 2;
    int& y = const_cast<int&>(x);
    
    int z = const_cast<int>(x);    // error
    
    k = 5;
    
    printf("k = %d\n", k);
    printf("j = %d\n", j);
    
    y = 8;
    
    printf("x = %d\n", x);
    printf("y = %d\n", y);
    printf("&x = %p\n", &x);
    printf("&y = %p\n", &y);
}

void reinterpret_cast_demo()
{
    int i = 0;
    char c = 'c';
    int* pi = &i;
    char* pc = &c;
    
    pc = reinterpret_cast<char*>(pi);
    pi = reinterpret_cast<int*>(pc);
    pi = reinterpret_cast<int*>(i);
    c = reinterpret_cast<char>(i);     // error
}

void dynamic_cast_demo()
{
    int i = 0;
    int* pi = &i;
    char* pc = dynamic_cast<char*>(pi);    // error
}

int main()
{
    static_cast_demo();
    const_cast_demo();
    reinterpret_cast_demo();
    dynamic_cast_demo();
    
    return 0;
}

        我們來(lái)分析下這個(gè)代碼,在 static_cast_demo 中,static_cast 不能用于指針間的轉(zhuǎn)換,所以第 11 行會(huì)報(bào)錯(cuò)。在 const_cast_demo 中,第 16 行定義了一個(gè)具有只讀屬性的變量 j,我們還是可以通過(guò) const_cast 來(lái)改變它的屬性的。第 19 行定義了一個(gè)真正意義上的常量,它會(huì)進(jìn)入到符號(hào)表中,但在棧上會(huì)為它分配 4 個(gè)字節(jié)的空間,所以第 20 行的也會(huì)成功。const_cast 強(qiáng)制轉(zhuǎn)換的目標(biāo)類型必須是指針或引用,所以第 22 行會(huì)報(bào)錯(cuò)。第 26 、 27 行會(huì)打印出 5、5;第 31 - 34 會(huì)打印出 2、8、后面兩個(gè)地址是一樣的。在 reinterpret_cast_demo 中,reinterpret_cast 用于指針類型間及整數(shù)和指針類型間的強(qiáng)制轉(zhuǎn)換,所以第 47 行會(huì)報(bào)錯(cuò)。在 dynamic_cast_demo 中,第 54 行會(huì)報(bào)錯(cuò)。我們來(lái)看看編譯結(jié)果

新型的類型轉(zhuǎn)換(九)

        我們分別注釋掉這幾行,再來(lái)編譯,看看結(jié)果是否如我們所分析的那樣

新型的類型轉(zhuǎn)換(九)

        我們看到和我們所分析的是一致的。通過(guò)對(duì)強(qiáng)制類型轉(zhuǎn)換的學(xué)習(xí),總結(jié)如下:1、C 方式的強(qiáng)制類型轉(zhuǎn)換:a> 過(guò)于粗暴。 b> 潛在的問(wèn)題不易被發(fā)現(xiàn)。 c> 不易在代碼中定位;2、新式類型轉(zhuǎn)換以 C++ 關(guān)鍵字的方式出現(xiàn):a> 編譯器能幫助檢查潛在的問(wèn)題。 b> 非常方便的在代碼中定位。 c> 支持動(dòng)態(tài)類型識(shí)別(dynamic_cast)。

        歡迎大家一起來(lái)學(xué)習(xí) C++ 語(yǔ)言,可以加我QQ:243343083。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

本文標(biāo)題:新型的類型轉(zhuǎn)換(九)-創(chuàng)新互聯(lián)
當(dāng)前地址:http://aaarwkj.com/article38/ppisp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、外貿(mào)網(wǎng)站建設(shè)、商城網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、面包屑導(dǎo)航、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
性色av人妻中文一区二区| 高清美女视频亚洲免费| 日韩在线免费色视频| 亚洲精品成av人在线观看 | 国产欧美日韩91成人| 亚洲欧美国产精品日韩| 国产精品久久中文字幕亚洲| 亚洲欧美日韩国产桃色| 日韩欧美亚洲另类激情一区| 国产v精品欧美精品v日韩| 中国毛片一区二区三区| 在线视频网友自拍偷拍| 久久精品一区欧美成人| 亚洲一区二区婷婷久久| 女同欲望一区二区三区久久| 亚洲午夜一区二区精品| 中文字幕韩国三级电影| 国产精品久久久久久久av三级| 国产日产精品久久婷婷色 | 成人在线午夜你懂的视频| 国产精品传媒免费在线观看| 亚洲中文字幕第三页在线观看 | 日韩成人一级片在线观看| 濑亚美莉在线观看一区二区三区 | 成人午夜激情四射av| 91高清国产在线播放| 91天美精东果冻麻豆| 精品在线中文字幕不卡| 中文字幕人妻在线播放| 久久久国产一区二区三区| 亚洲av男人电影天堂| 亚洲福利一区福利三区| 日韩欧美国产精品自拍| 亚洲欧美日韩精品在线观看| 国语少妇高潮对白在线| 精品久久人妻中文字幕免费| 超碰91人人草人人干| 亚洲成年人黄色小说网站| 中文国产人精品久久蜜桃| 日韩一区二区电影在线| 国产av日韩精品一区二区三区|