更具体地说,假设A
是 的可访问基类B
,以下代码是否会产生未定义的行为,并且断言是否保证不会根据标准触发?
void test(B b1, B b2) {
A* a2 = &b2;
auto offset = reinterpret_cast<char*>(a2) - reinterpret_cast<char*>(&b2);
A* a1 = reinterpret_cast<A*>(reinterpret_cast<char*>(&b1) + offset);
assert(a1 == static_cast<A*>(&b1));
}
编辑:我知道所有常见的编译器供应商都以与test
. 我正在寻找的是标准中这种行为的保证(隐式或显式)。或者,标准提供的对象存储布局保证范围的合理详细描述,作为不保证此行为的证据,也将被接受。