今天在水木上看到一篇帖子,發現有個地方以前沒有接觸過,所以記下來以備後用。
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