今天在水木上看到一篇帖子,发现有个地方以前没有接触过,所以记下来以备后用。
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是属于左值语义,所以这里应该是编译器的错误。
Orz