真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

52CPP類型轉(zhuǎn)換-static-cast-創(chuàng)新互聯(lián)

C風(fēng)格的類型轉(zhuǎn)換很容易理解:

創(chuàng)新互聯(lián)主營貢井網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app開發(fā),貢井h5微信小程序搭建,貢井網(wǎng)站營銷推廣歡迎貢井等地區(qū)企業(yè)咨詢

語法:(目標(biāo)類型)表達(dá)式 或 目標(biāo)類型(表達(dá)式);

C++認(rèn)為C風(fēng)格的類型轉(zhuǎn)換過于松散,可能會(huì)帶來隱患,不夠安全。

C++推出了新的類型轉(zhuǎn)換來替代C風(fēng)格的類型轉(zhuǎn)換,采用更嚴(yán)格的語法檢查,降低使用風(fēng)險(xiǎn)。

C++新增了四個(gè)關(guān)鍵字 static_cast、const_cast、reinterpret_cast和dynamic_cast,用于支持C++風(fēng)格的類型轉(zhuǎn)換

C++的類型轉(zhuǎn)換只是語法上的解釋,本質(zhì)上與C風(fēng)格的類型轉(zhuǎn)換沒什么不同,C語言做不到的事情的C++也做不到

語法:

static_cast(表達(dá)式);

const_cast(表達(dá)式);

reinterpret_cast(表達(dá)式);

dynamic_cast(表達(dá)式); //重新解釋

實(shí)際開發(fā)中用的最多(97%)的是static_cast,其它幾種很少用

static_cast

#includeusing namespace std;
void func(void *ptr)
{
    double *pp = static_cast(ptr);
    //其它代碼
}
//內(nèi)置數(shù)據(jù)類型轉(zhuǎn)換
void test()
{
    int ii = 3;
    long ll = ii; //絕對安全,可以隱式轉(zhuǎn)換,不會(huì)出現(xiàn)警告

    double dd = 1.234;
    long ll1 = dd;                    //可以隱式轉(zhuǎn)換,但是,會(huì)出現(xiàn)可能丟失數(shù)據(jù)的警告
    long ll2 = (long)dd;              // long(dd)  C風(fēng)格:顯示轉(zhuǎn)換,不會(huì)出現(xiàn)警告
    long ll3 = static_cast(dd); // C++風(fēng)格:顯示轉(zhuǎn)換,不會(huì)出現(xiàn)警告
}
//指針轉(zhuǎn)換
void test2()
{
    int ii = 10;

    // double *pd1 = ⅈ//錯(cuò)誤,不能隱私轉(zhuǎn)換
    double *pd2 = (double *)ⅈ // C風(fēng)格,強(qiáng)制轉(zhuǎn)換
    // double *pd3 = static_cast(&ii); //錯(cuò)誤,static_cast不支持不同烈性指針的轉(zhuǎn)換

    void *pv = ⅈ                          //任何類型的指針都可以隱私轉(zhuǎn)換成void*
    double *pd4 = static_cast(pv); // static_cast可以把void*轉(zhuǎn)換成其它類型的指針
}
int main()
{
    test();
    test2();
    return 0;
}

為什么要轉(zhuǎn)換指針呢? 一般是為了調(diào)用函數(shù),指針用于傳遞參數(shù),如果調(diào)用的函數(shù)需要轉(zhuǎn)換指針,可以把它的形參設(shè)計(jì)為void* 類型,調(diào)用的時(shí)候,把其它類型的指針作為實(shí)參傳進(jìn)去,在函數(shù)里面再把void*指針轉(zhuǎn)換成其它類型的指針。

也就是說轉(zhuǎn)換指針的場景是:

其它類型的指針->void*指針->其它類型指針

reinterpret_cast

只為轉(zhuǎn)換指針的場景而設(shè)計(jì)

上面幾種應(yīng)用場景在多線程、函數(shù)回調(diào)和網(wǎng)絡(luò)編程中經(jīng)常用到。

const_cast

static_cast不能丟掉指針(引用)的const和volitale屬性,const_cast可以。

C++中volitale關(guān)鍵字沒什么用,java中的volitale關(guān)鍵字有用的,這里就不見volitale了,有興趣再百度把。

#includeusing namespace std;
void func(void *ptr)
{
    double *pp = static_cast(ptr);
    //其它代碼
}
//內(nèi)置數(shù)據(jù)類型轉(zhuǎn)換
void test()
{
    int ii = 3;
    long ll = ii; //絕對安全,可以隱式轉(zhuǎn)換,不會(huì)出現(xiàn)警告

    double dd = 1.234;
    long ll1 = dd;                    //可以隱式轉(zhuǎn)換,但是,會(huì)出現(xiàn)可能丟失數(shù)據(jù)的警告
    long ll2 = (long)dd;              // long(dd)  C風(fēng)格:顯示轉(zhuǎn)換,不會(huì)出現(xiàn)警告
    long ll3 = static_cast(dd); // C++風(fēng)格:顯示轉(zhuǎn)換,不會(huì)出現(xiàn)警告
}
//指針轉(zhuǎn)換
void test2()
{
    int ii = 10;

    // double *pd1 = ⅈ//錯(cuò)誤,不能隱私轉(zhuǎn)換
    double *pd2 = (double *)ⅈ // C風(fēng)格,強(qiáng)制轉(zhuǎn)換
    // double *pd3 = static_cast(&ii); //錯(cuò)誤,static_cast不支持不同烈性指針的轉(zhuǎn)換

    void *pv = ⅈ                          //任何類型的指針都可以隱私轉(zhuǎn)換成void*
    double *pd4 = static_cast(pv); // static_cast可以把void*轉(zhuǎn)換成其它類型的指針
}
void func2(void *ptr)
{
    // int i = reinterpret_cast(ptr);
    // cout<< i<< endl;
}
// reinterpret_cast
// VS里面可以,但是有警告 警告的原因是int和void*占用的內(nèi)存空間不一樣
void test3()
{
    int ii = 10;
    double *pd3 = reinterpret_cast(&ii);

    func2(reinterpret_cast(ii));
}

// long long 和void* 都占8字節(jié)
void func3(void *ptr)
{
    long long i = reinterpret_cast(ptr);
    cout<< i<< endl;
}

void test4()
{
    long long ii = 10;
    func3(reinterpret_cast(ii));
}
// const_cast
void func4(int *i) {}
void test5()
{
    const int *a = nullptr;
    int *b = (int *)a;             // C風(fēng)格,強(qiáng)制轉(zhuǎn)換,丟掉const限定符
    int *c = const_cast(a); // C++風(fēng)格,強(qiáng)制轉(zhuǎn)換,丟掉const限定符

    func4(const_cast(a));
}
int main()
{
    test();
    test2();
    // test3();
    test4();
    test5();
    return 0;
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


文章題目:52CPP類型轉(zhuǎn)換-static-cast-創(chuàng)新互聯(lián)
文章起源:http://weahome.cn/article/cohcpd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部