对象的"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
?如果不是,在实践中总是如此吗?(这是假设B
是D
唯一的基类)
如果不是,在实践中总是如此吗?(这是假设
B
是D
唯一的基类)
不。即使这种假设也无济于事。请考虑以下有效修改:
class D : public B
{
virtual ~D() = default;
};
D
现在是多态的,而B
不是。实际上,这意味着为动态调度增加了一个指针。通常添加到对象的开头。所以现在B
子对象处于偏移位置,尽管是唯一的基础。
值得注意的是,正如@melpomene指出的那样,您的测试仍然会通过。由于D*
隐式转换为B*
,因此当您assert(pb == pd);
时,编译器已经为您进行了调整。我的观点是,你不能指望重新解释演员(我知道你问的是关于地址的平面重新解释)是正确的。
相关文章:
- 在C++中有多个指向单个对象的指针的正确方法是什么?
- 将指向多维数组向量中的单个项的指针传递给函数 c++
- 如何在单个链表中交换两个节点的位置,只修改指针
- 是否可以使用模板类的单个参数将类型和该类型的指针传递给 c++ 模板类?
- 是否可以创建带有索引但没有指针的单个链表?
- 单个指针可以指向两个或多个变量吗?
- 指向单个项目或数组的指针
- 对象的"this"指针是否等于指向其(单个)基类的指针?
- 在C 中,将单个值写入一个非初始化的指针
- 在 C/C++ 中使用单个初始化初始化具有相同值的多个指针
- 快速将双重指针阵列转换为单个指针,可能是连续的
- 使用“ static_cast”在空指针(单个或多个继承)上进行降低
- 将单个对象像一个带有一个元素的数组一样对待,采用一端指针
- 在单个指针数组中调用不同派生类的虚拟方法
- 访问指针数组/通过另一个指针并删除数组中的单个元素而不删除第一个指针或整个数组
- 单个结构数据成员的奇怪指针地址
- 如何检查指针是否指向数组或单个int或char
- 是否可以将指向类成员的指针作为C++中的单个参数传递
- C++ 单个指针上的多个新内容
- 指针——单个字符串与字符串数组