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...