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、char
或 unsigned char
类型,以及其他一些情况)。
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、char
或 unsigned char
类型,以及其他一些情况)。