关于右值指针类型的动态类型
今天看到一篇很好的贴纸就转了过来,大家仔细研究一下看看吧。
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是属于左值语义,所以这里应该是编译器的错误。
顶(0)
踩(0)
下一篇:使用带参数的对象作为类成员
- 最新评论
