c++ – Eine Frage zu static_cast
阿神
阿神 2017-06-05 11:11:51
0
1
871
Der

static_cast-Operator konvertiert den Ausdruck in den Typ-ID-Typ, es gibt jedoch keine Laufzeit-Typprüfung, um die Sicherheit der Konvertierung zu gewährleisten.
① Wird zur Konvertierung von Zeigern oder Referenzen zwischen Basisklassen (Elternklassen) und abgeleiteten Klassen (Unterklassen) in der Klassenhierarchie verwendet.
Upcasting (Konvertieren eines Zeigers oder einer Referenz einer abgeleiteten Klasse in eine Basisklassendarstellung) ist sicher.
Beim Downcasting (Konvertieren eines Basisklassenzeigers oder einer Referenz auf eine abgeleitete Klassendarstellung) erfolgt keine dynamische Typprüfung ist unsicher.

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

Ich würde gerne fragen, was der fettgedruckte Teil bedeutet? Was bedeutet unsicher?

阿神
阿神

闭关修行中......

Antworte allen(1)
仅有的幸福

比如说有一个父类A,派生出两个子类BC,有一个A类指针或引用a指向了一个B类对象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;
}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage