c++ - Une question sur static_cast
阿神
阿神 2017-06-05 11:11:51
0
1
838
L'opérateur

static_cast convertit l'expression en type d'identification de type, mais il n'y a pas de vérification de type à l'exécution pour garantir la sécurité de la conversion.
① Utilisé pour la conversion de pointeurs ou de références entre les classes de base (classes parents) et les classes dérivées (sous-classes) dans la hiérarchie des classes.
L'upcasting (conversion d'un pointeur ou d'une référence d'une classe dérivée en une représentation de classe de base) est sûr
Lors de l'exécution d'un downcasting (conversion d'un pointeur de classe de base ou d'une référence en une représentation de classe dérivée), il n'y a pas de vérification de type dynamique, donc il est dangereux.

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

Je voudrais demander, que signifie la partie en gras ? Que signifie dangereux ?

阿神
阿神

闭关修行中......

répondre à tous(1)
仅有的幸福

Par exemple, il existe une classe parent A,派生出两个子类BC,有一个A类指针或引用a指向了一个B类对象b,此时用static_cast进行下行转换,可以将其转换成C类的对象(指针或引用),此时就会出现不安全,因为C类的一些成员函数/变量对B类的对象不适用。
简单来说,就是可以利用static_cast qui convertit les objets de différentes sous-classes de la même classe parent entre eux, ce qui entraîne des erreurs de type.
Par exemple :

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;
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal