關於右值指針類型的動態類型

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

 

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

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章