对象的"this"指针是否等于指向其(单个)基类的指针?

Is an object's 'this' pointer equal to a pointer to its (single) base class?

本文关键字:指针 单个 基类 于指 this 是否 对象      更新时间:2023-10-16

给定以下内容:

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?如果不是,在实践中总是如此吗?(这是假设BD唯一的基类)

如果不是,在实践中总是如此吗?(这是假设BD唯一的基类)

不。即使这种假设也无济于事。请考虑以下有效修改:

class D : public B
{
virtual ~D() = default;
};

D现在是多态的,而B不是。实际上,这意味着为动态调度增加了一个指针。通常添加到对象的开头。所以现在B子对象处于偏移位置,尽管是唯一的基础。

值得注意的是,正如@melpomene指出的那样,您的测试仍然会通过。由于D*隐式转换为B*,因此当您assert(pb == pd);时,编译器已经为您进行了调整。我的观点是,你不能指望重新解释演员(我知道你问的是关于地址的平面重新解释)是正确的。