繁体   English   中英

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

[英]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 如果不是,实际上总是这样吗? (假设BD的唯一基类)

如果不是,实际上总是这样吗? (假设BD的唯一基类)

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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM