[英]Is an object's 'this' pointer equal to a pointer to its (single) base class?
鉴于以下:
class B
{
// impl here, can be anything valid for a class
};
class D : public B
{
};
void main()
{
D real;
D * pd = ℜ
B * pb = ℜ
// assert(pb == pd);
// Edit: I meant:
assert((void *)pb == (void *)pd);
}
c ++标准是否保证 pb == pd
? 如果不是,实际上总是这样吗? (假设B
是D
的唯一基类)
如果不是,实际上总是这样吗? (假设
B
是D
的唯一基类)
不。 即使这样的假设也无济于事。 考虑以下有效修改:
class D : public B
{
virtual ~D() = default;
};
D
现在是多态的,而B
不是。 实际上,这意味着增加了动态分配的指针。 普遍添加在对象的开头。 因此,尽管B
子对象是唯一的基础,但它处于偏移位置。
值得注意的是,正如@melpomene指出的那样,您的测试仍会通过。 由于D*
可隐式转换为B*
,因此当您assert(pb == pd);
时,编译器已经为您进行了调整assert(pb == pd);
。 我的观点是,您不能指望重新解释演员表(我理解您要求对地址进行统一重新解释)是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.