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

亚姆米林德
struct Base {
  int i, j;
};

struct Derived : Base {};

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

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

这会是不确定的行为吗?

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

格子呢骆驼

是的,这是不确定的行为。使用static_cast以从基类铸造到派生类型的对象不是的一个实例是未定义的行为。

此外,通过无效类型的变量(不是动态类型,动态类型的基类charunsigned char类型以及其他几种情况)访问对象,从而破坏了严格的别名规则

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将基础对象转换为派生类

来自分类Dev

C ++设计:无需额外的数据成员即可从基类转换为派生类

来自分类Dev

c ++设计:无需额外的数据成员即可从基类转换为派生类

来自分类Dev

将基础动态转换为派生对象

来自分类Dev

从(对基础对象的基本引用)到(派生类的引用)的静态转换

来自分类Dev

在这种情况下,将基类的对象强制转换为EMPTY派生类是不安全的

来自分类Dev

将对象转换为基类或派生类?

来自分类Dev

c++派生类对象没有成员,为什么?

来自分类Dev

是否可以滥用reinterpret_cast将对象转换为派生类?

来自分类Dev

静态将基础强制转换为派生指针并构造派生成员

来自分类Dev

在没有其他成员的情况下重新解释转换为派生类好吗?

来自分类Dev

为什么派生类成员的初始化值转换为基指针时没有丢失?

来自分类Dev

将派生对象存储到void *,然后将基础对象强制转换为void *是不安全的吗?

来自分类Dev

如何遍历某个派生类的基础对象

来自分类Dev

为什么将基本类型实例转换为派生类型对象/引用不是类型安全的

来自分类Dev

将基础转换为派生类时,在编译时不抛出错误

来自分类Dev

将基础转换为派生类时,在编译时不抛出错误

来自分类Dev

重置派生类对象

来自分类Dev

如何将基础对象的引用更改为被派生为派生类型的派生

来自分类Dev

如何将基础对象的引用更改为已被派生为派生类型的派生

来自分类Dev

从虚拟基础派生类,没有默认构造函数

来自分类Dev

C ++是否具有检查对象是否为派生类型的对象的现有方法?

来自分类Dev

C ++将基础和派生类对象存储在一起

来自分类Dev

C ++将基础和派生类对象存储在一起

来自分类Dev

从Base引用对象的派生类的调用成员

来自分类Dev

我怎样才能让派生类的对象具有“引用”基类实例的成员?

来自分类Dev

将父类的const引用转换为派生的子对象

来自分类Dev

将基类数组转换为派生类数组

来自分类Dev

将基类转换为派生类

Related 相关文章

  1. 1

    将基础对象转换为派生类

  2. 2

    C ++设计:无需额外的数据成员即可从基类转换为派生类

  3. 3

    c ++设计:无需额外的数据成员即可从基类转换为派生类

  4. 4

    将基础动态转换为派生对象

  5. 5

    从(对基础对象的基本引用)到(派生类的引用)的静态转换

  6. 6

    在这种情况下,将基类的对象强制转换为EMPTY派生类是不安全的

  7. 7

    将对象转换为基类或派生类?

  8. 8

    c++派生类对象没有成员,为什么?

  9. 9

    是否可以滥用reinterpret_cast将对象转换为派生类?

  10. 10

    静态将基础强制转换为派生指针并构造派生成员

  11. 11

    在没有其他成员的情况下重新解释转换为派生类好吗?

  12. 12

    为什么派生类成员的初始化值转换为基指针时没有丢失?

  13. 13

    将派生对象存储到void *,然后将基础对象强制转换为void *是不安全的吗?

  14. 14

    如何遍历某个派生类的基础对象

  15. 15

    为什么将基本类型实例转换为派生类型对象/引用不是类型安全的

  16. 16

    将基础转换为派生类时,在编译时不抛出错误

  17. 17

    将基础转换为派生类时,在编译时不抛出错误

  18. 18

    重置派生类对象

  19. 19

    如何将基础对象的引用更改为被派生为派生类型的派生

  20. 20

    如何将基础对象的引用更改为已被派生为派生类型的派生

  21. 21

    从虚拟基础派生类,没有默认构造函数

  22. 22

    C ++是否具有检查对象是否为派生类型的对象的现有方法?

  23. 23

    C ++将基础和派生类对象存储在一起

  24. 24

    C ++将基础和派生类对象存储在一起

  25. 25

    从Base引用对象的派生类的调用成员

  26. 26

    我怎样才能让派生类的对象具有“引用”基类实例的成员?

  27. 27

    将父类的const引用转换为派生的子对象

  28. 28

    将基类数组转换为派生类数组

  29. 29

    将基类转换为派生类

热门标签

归档