struct Base {
int i, j;
};
struct Derived : Base {};
在上述情况下,如果我们执行以下操作:
Base b;
auto& d = static_cast<Derived&>(b);
d.i = 1;
这是不确定的行为吗?
注意:由于某些原因,我无法编辑自动生成的Google protobuf库的代码。因此,将这些类扩展到我的自定义类,它提供了更多类型和类型。 API,但它没有任何额外的数据成员。
答案 0 :(得分:4)
是的,这是未定义的行为。使用static_cast
从基类转换为对象不是实例的派生类型是未定义的行为。
此外,您通过无效类型的变量(不是动态类型,动态类型的基类,char
或unsigned char
类型访问对象来打破严格别名规则,并且其他几个案例)。