Maison  >  Questions et réponses  >  le corps du texte

c++ - Une question sur static_cast

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 ?

阿神阿神2665 Il y a quelques jours792

répondre à tous(1)je répondrai

  • 仅有的幸福

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

    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;
    }

    répondre
    0
  • Annulerrépondre