搜尋

首頁  >  問答  >  主體

c++ - static_cast的一個疑問

static_cast運算子把expression轉換為type-id類型,但沒有執行時間類型檢查來保證轉換的安全性。
①用於類別層次結構中基底類別(父類別)和衍生類別(子類別)之間指標或引用的轉換。
進行上行轉換(把衍生類別的指標或參考轉換成基底類別表示)是安全的;
#進行下行轉換(把基底類別指標或參考轉換成衍生類別表示)時,由於沒有動態類型檢查,所以是不安全的。

來自:http://baike.baidu.com/link?u...

我想問下,加粗部分,它說的是什麼意思?不安全指的是什麼?

阿神阿神2754 天前860

全部回覆(1)我來回復

  • 仅有的幸福

    仅有的幸福2017-06-05 11:13:51

    比如說有一個父類A,派生出兩個子類BC,有一個A類指標或引用a指向了一個B類指標或引用a指向了一個B類指標static_cast進行下行轉換,可以轉換成C類的物件(指標或引用),此時就會出現不安全,因為C
    類的一些成員函數/變數對B類的物件不適用。
    簡單來說,就是可以利用

    static_cast🎜在同一父類別的不同子類別的物件之間互轉,導致型別的錯誤。 🎜舉例:🎜
    class A {
    public:
        void function_A();
    };
    class B:public A {
    public:
        void function_B();
    };
    class C:public A {
    public:
        void function_C();
    };
    
    int main() {
        A* a;
        B b;
        a = &b;
        C* c = static_cast<C*>(a);  //cast合法
        c->function_C();            //此处会调用不存在的函数,
                                    //实际上c指向的是一个B类的对象
                                    //但是此处强行将其作为C类的对象解释
        return 0;
    }

    回覆
    0
  • 取消回覆