struct B{ virtual void f(); }; struct C:B { virtual void f(); }; (&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是属于左值语义,所以这里应该是编译器的错误。