標籤:style blog color 使用 os 代碼
#include <iostream>using namespace std;int main(){ //1.const_cast //const int a = 10; //int* ptr = const_cast<int*>(&a);//將const屬性去除 //*ptr = 100; //2.static_cast //編譯器隱式執行的操作都可以由static_cast顯示完成,顯示的強制類型轉換會產生警告,當使用static_cast會關閉警告 //static_cast就是基本的類型轉換 double dNum = 12.2356; void* ptr = &dNum; //double* dp = static_cast<double*>(ptr);//這個是c++標準的形式 double* dp = (double*)ptr;//c語言的強制轉換,效果和上一句一樣 //3.reinterpret_cast 我到底要看看這個是幹啥的 //根據二進位位進行重新解釋,看這個沒啥意義吧 //4.dynamic_cast有時間再看一下 getchar(); return 0;}//一個區別static_cast和reinterpret_cast的例子reinterpret_cast是為了映射到一個完全不同類型的意思,這個關鍵詞在我們需要把類型映射回原有類型時用到它。我們映射到的類型僅僅是為了故弄玄虛和其他目的,這是所有映射中最危險的。(這句話是C++編程思想中的原話) static_cast和reinterpret_cast的區別主要在於多重繼承,比如class A {public: int m_a;};class B {public: int m_b;};class C : public A, public B {};那麼對於以下代碼: C c;printf("%p, %p, %p", &c, reinterpret_cast<B*>(&c), static_cast <B*>(&c));前兩個的輸出值是相同的,最後一個則會在原基礎上位移4個位元組,這是因為static_cast計算了父子類指標轉換的位移量,並將之轉換到正確的地址(c裡面有m_a,m_b,轉換為B*指標後指到m_b處),而reinterpret_cast卻不會做這一層轉換。 因此, 你需要謹慎使用 reinterpret_cast.