gpt4 book ai didi

c++ - 对象的 'this' 指针是否等于指向其(单个)基类的指针?

转载 作者:行者123 更新时间:2023-11-27 22:42:16 24 4
gpt4 key购买 nike

鉴于以下情况:

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 的唯一基类)

最佳答案

If not, is it always the case in practice? (this is assuming B is D's one and only base class)

没有。即使是这个假设也无济于事。考虑这个有效的修改:

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

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

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

关于c++ - 对象的 'this' 指针是否等于指向其(单个)基类的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47786907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com