C 4 種具有更 為準確語義的新強制轉換型別

2022-05-29 13:48:09 字數 1126 閱讀 9889

1. static_cast() 可用於把指向a 的指標強制轉換為指向b 的指標,

其約束條件是類b必須是類a的子類。例如:

a *obj = new b;

b *b = static_cast(obj);

如果該物件不是b 的乙個例項,那麼使用結果指標將可以導致莫名其妙的系統崩潰。

2.dynamiolcast ()與static_cast ()類似,只是它使用的是執行時型別資訊(rtti,runtime

type information)的方法來驗證與這個指標相關的物件obj是否是類b 的乙個例項。如果不是,

強制轉換就會返回乙個空指標null. 例如:

a *obj = new b;

b *b = dynamic_cast(obj);

if (b)

b->somefunctiondeclaredinb() ;

在某些編譯器中,dynamic_cast()不能跨動態庫工作。它也依賴於編譯器對rtti的支援,

但為了減小,可執行檔案的大小,程式設計師可以關閉對rtti的支援這一特色。

qt過對object的子類提供qobject_cast ()'來解決這些問題。t類必須是 qobject或者qobject子類繼承而來的

3.const_cast()新增或移除對指標或者引用的const 限定。

例如:int myclass::someconstfunction() const

在前面的例子中,我們捨棄了對this指標的const 限定,是為了呼叫非const成員函式recomputeinternaldata();

(但不推薦這種做法,並且也通常可以通過使用mutable 關鍵字來避免這種做法。)

4、reinterpre_cast() 把任意型別的指標或者引用轉換成任意的其他型別。例如:

short j = 0x1234;

if (reinterpret_cast(j) == oxl2)

std::cout << "the byte order is big-endian" << std::endl;

C 4種型別轉換

c 型別轉換 const cast,去const屬性。static cast,靜態型別轉換。如int轉換成char。dynamic cast,動態型別轉換。如子類和父類之間的多型型別轉換。reinterpret cast,僅僅重新解釋型別,但沒有進行二進位制的轉換。const cast const ...

C 4種型別轉換

總 結 去const屬性用const cast。基本型別轉換用static cast。多型類之間的型別轉換用daynamic cast。不同型別的指標型別轉換用reinterpreter cast。任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static cast 注 頂層con...

C 4種強制型別轉換

c 的四種強制型別轉換為 static cast const cast reinterpret cast和dynamic cast 型別轉換的一般形式 cast name expression 任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static cast double sl...