Derived class 没有额外的数据成员;将基对象静态向下转换为派生对象是否安全?

Derived class has no extra data members; Is it safe to statically downcast a base object to a derived object?

struct Base {
  int i, j;
};

struct Derived : Base {};

对于上述情况,如果我们执行以下操作:

Base b;
auto& d = static_cast<Derived&>(b);
d.i = 1;

这会是未定义的行为吗?

注意:由于某些原因,我无法编辑自动生成的 google protobuf 库的代码。因此,将那些 classes 扩展到我的自定义 class,它提供了更多类型和 API,但它没有任何额外的数据成员。

是的,这是未定义的行为。使用 static_cast 从基础 class 转换为对象不是其实例的派生类型是未定义的行为。

此外,您通过无效类型(不是动态类型、动态类型的基础 class、charunsigned char 类型,以及其他一些情况)。