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

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

本文关键字:派生 对象 静态 转换 安全 是否 数据成员      更新时间:2023-10-16
struct Base {
  int i, j;
};
struct Derived : Base {};

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

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

会不会是一种未定义的行为?

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

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

此外,通过无效类型的变量(不是动态类型、动态类型的基类、charunsigned char类型以及其他一些情况)访问对象,可以破坏严格的别名规则。