简单定义:
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吗?其中有明确定义的吗?是否发生隐式静态转换?
隐式
static_cast
正在发生。
将派生指针与基类指针进行比较,会将派生指针强制转换为基类类型,并在此过程中对其进行调整。
不允许比较不同的基指针,因为它们不可转换。