c++ - Soalan mengenai static_cast
阿神
阿神 2017-06-05 11:11:51
0
1
836
Operator

static_cast menukar ungkapan kepada jenis id jenis, tetapi tiada semakan jenis masa jalan untuk memastikan keselamatan penukaran.
① Digunakan untuk penukaran penunjuk atau rujukan antara kelas asas (kelas induk) dan kelas terbitan (subkelas) dalam hierarki kelas.
Upcasting (menukar penunjuk atau rujukan kelas terbitan kepada perwakilan kelas asas) adalah selamat
Apabila melakukan downcasting (menukar penunjuk kelas asas atau rujukan kepada perwakilan kelas terbitan), tiada semakan jenis dinamik, jadi ia adalah tidak selamat.

Daripada: http://baike.baidu.com/link?u...

Saya ingin bertanya, apakah maksud bahagian bold? Apakah maksud tidak selamat?

阿神
阿神

闭关修行中......

membalas semua(1)
仅有的幸福

Sebagai contoh, terdapat kelas induk A,派生出两个子类BC,有一个A类指针或引用a指向了一个B类对象b,此时用static_cast进行下行转换,可以将其转换成C类的对象(指针或引用),此时就会出现不安全,因为C类的一些成员函数/变量对B类的对象不适用。
简单来说,就是可以利用static_cast yang menukarkan objek subkelas berbeza daripada kelas induk yang sama kepada satu sama lain, mengakibatkan ralat jenis.
Contohnya:

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;
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan