staitc_cast,const_cast....

來源:互聯網
上載者:User

標籤: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.

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.