日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 工業(yè)控制 > 電子設(shè)計自動化
[導讀]標準c++中主要有四種強制轉(zhuǎn)換類型運算符: const_cast,reinterpret_cast,static_cast,dynamic_cast等等。 1)static_cast<T*>(a) 將地址a轉(zhuǎn)換成類型T,T和a必須是指針、引用、算術(shù)類型或枚舉類型。 表達式stati

標準c++中主要有四種強制轉(zhuǎn)換類型運算符:

const_cast,reinterpret_cast,static_cast,dynamic_cast等等。

1)static_cast<T*>(a)

將地址a轉(zhuǎn)換成類型T,T和a必須是指針、引用、算術(shù)類型或枚舉類型。

表達式static_cast<T*>(a), a的值轉(zhuǎn)換為模板中指定的類型T.在運行時轉(zhuǎn)換過程中,不進行類型檢查來確保轉(zhuǎn)換的安全性。

例子:

class B { ... };

class D : public B { ... };

void f(B* pb, D* pd)

{

D* pd2 = static_cast<D*>(pb); // 不安全, pb可能只是B的指針

B* pb2 = static_cast<B*>(pd); // 安全的

...

}

class B { ... };

class D : public B { ... };

void f(B* pb, D* pd)

{

D* pd2 = static_cast<D*>(pb); // 不安全, pb可能只是B的指針

B* pb2 = static_cast<B*>(pd); // 安全的

...

}

class B { ... };

class D : public B { ... };

void f(B* pb, D* pd)

{

D* pd2 = static_cast<D*>(pb); // 不安全, pb可能只是B的指針

B* pb2 = static_cast<B*>(pd); // 安全的

...

}

2)dynamic_cast<T*>(a)

完成類層次結(jié)構(gòu)中的提升。T必須是一個指針、引用或無類型的指針。a必須是決定一個指針或引用的表達式。

表達式dynamic_cast<T*>(a) 將a值轉(zhuǎn)換為類型為T的對象指針。如果類型T不是a的某個基類型,該操作將返回一個空指針。

例子:

class A { ... };

class B { ... };

void f()

{

A* pa = new A;

B* pb = new B;

void* pv = dynamic_cast<A*>(pa);

// pv 現(xiàn)在指向了一個類型為A的對象

...

pv = dynamic_cast<B*>(pb);

// pv 現(xiàn)在指向了一個類型為B的對象

}

3)const_cast<T*>(a)

去掉類型中的常量,除了const或不穩(wěn)定的變址數(shù),T和a必須是相同的類型。

表達式const_cast<T*>(a)被用于從一個類中去除以下這些屬性:const, volatile, 和 __unaligned.

例子:

class A { ... };

void f()

{

const A *pa = new A;//const對象

A *pb;//非const對象

//pb = pa; // 這里將出錯,不能將const對象指針賦值給非const對象

pb = const_cast<A*>(pa); // 現(xiàn)在OK了

...

}

class A { ... };

void f()

{

const A *pa = new A;//const對象

A *pb;//非const對象

//pb = pa; // 這里將出錯,不能將const對象指針賦值給非const對象

pb = const_cast<A*>(pa); // 現(xiàn)在OK了

...

}

class A { ... };

void f()

{

const A *pa = new A;//const對象

A *pb;//非const對象

//pb = pa; // 這里將出錯,不能將const對象指針賦值給非const對象

pb = const_cast<A*>(pa); // 現(xiàn)在OK了

...

}

4)reinterpret_cast<T*>(a)

任何指針都可以轉(zhuǎn)換成其它類型的指針,T必須是一個指針、引用、算術(shù)類型、指向函數(shù)的指針或指向一個類成員的指針。

表達式reinterpret_cast<T*>(a)能夠用于諸如char* 到 int*,或者One_class* 到 Unrelated_class*等類似這樣的轉(zhuǎn)換,因此可能是不安全的。

例子:

class A { ... };

class B { ... };

void f()

{

A* pa = new A;

void* pv = reinterpret_cast<A*>(pa);

// pv 現(xiàn)在指向了一個類型為B的對象,這可能是不安全的

...

}



來源:向明天進軍0次

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉