比较指向超类的指针与指向子类的指针的规则是什么?

问题描述 投票:0回答:1

简单定义:

class B1 
{ /* stuff, virtual methods */ };

class B2 
{ /* stuff, virtual methods */ };

class D : public B1, public B2
{ /* stuff, overrides*/ };

一些变量:

D obj;
B1 *bp1 = &obj;
B2 *bp2 = &obj;

问题,以下测试在 C++ 中的表现如何?

assert(&obj == bp1);
assert(bp1 == &obj);

assert(&obj == bp2);
assert(bp2 == &obj);

assert(bp1 == bp2);
assert(bp2 == bp1);

有UB吗?其中有明确定义的吗?是否发生隐式静态转换?

c++ class pointers multiple-inheritance
1个回答
0
投票

隐式

static_cast
正在发生。

将派生指针与基类指针进行比较,会将派生指针强制转换为基类类型,并在此过程中对其进行调整。

不允许比较不同的基指针,因为它们不可转换。

© www.soinside.com 2019 - 2024. All rights reserved.