派生类没有额外的数据成员;将基对象静态向下转换为派生对象是否安全
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;
会不会是一种未定义的行为?
注意:由于某些原因,我无法编辑自动生成的谷歌protobuf库的代码。因此,将这些类扩展到我的自定义类,该类提供了更多类型和API,但它没有任何额外的数据成员。
是的,这是未定义的行为。使用 static_cast
从基类强制转换为对象不是其实例的派生类型是未定义的行为。
此外,通过无效类型的变量(不是动态类型、动态类型的基类、char
或unsigned char
类型以及其他一些情况)访问对象,可以破坏严格的别名规则。
相关文章:
- 为什么此派生对象无法访问基类的后递减方法?
- 如何在新的派生对象中获取基本对象的数据?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 在没有默认构造函数的情况下创建的派生对象
- OOP 标识派生对象
- 如何创建派生对象的向量?
- 将基类分配给派生对象,反之亦然,以C++以及静态和动态对象之间的差异
- 如何从 Gtk::窗口调用派生对象的析构函数
- 无法在派生对象上运行虚拟函数
- 尝试删除指向派生对象的基指针时断言错误
- 存储在一个通用容器中的派生对象.如何避免铸造
- 将派生对象分配给函数内的基类指针
- 替换派生对象向量中的对象"no matching function to call"
- 派生对象调用的 Base 方法的模板推导
- 用于填充 Base 和派生对象的 shared_ptr 向量的函数模板
- C++ UBSAN 对派生对象产生误报
- 如何验证我是否正在使用C++中的基对象或派生对象
- C++ 构造函数和派生对象
- 将派生对象传递给模板
- 指向派生作品的基本指针,即使派生对象不存在