当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

关于右值指针类型的动态类型

    今天看到一篇很好的贴纸就转了过来,大家仔细研究一下看看吧。

 struct B{

        virtual void f();

};

struct C:B {

        virtual void f();

};
 
B b;

(&b)->~B();

new (&b) C;

(&b)->f();  // 这里调用的是B::f


    为什么这里没有出现多态呢?来看达人的解释:

    “The dynamic type of an rvalue expression is its static type.”

    So if you try

    B* p = &b;

    p->f();

    The result will be C::f

    不过,紧跟着,又有达人指出了这里的错误,这里&b是属于左值语义,所以这里应该是编译器的错误。

相关内容
赞助商链接