用结构体强制转换c ++

时间:2019-06-05 15:49:10

标签: c++ struct

我可以简单地在c ++中将父结构转换为子结构吗?

我尝试投射:

Base s;
Child tmp = (Child)s;

,并收到此错误: 没有从...转换为C样式的强制转换。

有人可以帮助我解决此错误吗?

1 个答案:

答案 0 :(得分:0)

结构是由一系列成员组成的类型,成员的存储按有序序列分配。如果序列不匹配,则转换可能无法进行。

在struct对象中,其元素的地址(以及位字段分配单元的地址)按定义成员的顺序增加。指向结构的指针可以转换为指向其第一个成员的指针(或者,如果该成员是位字段,则指向其分配单元)。同样,指向结构的第一个成员的指针可以转换为指向封闭结构的指针。在结构的任何两个成员之间或在最后一个成员之后但在第一个成员之前可能没有未命名的填充。结构的大小至少等于其成员的大小之和。

首先,如果您使用的是c ++。为什么要在BaseChild之间执行c样式转换?

C ++为非多态转换提供了static_cast,为多态转换提供了dynamic_cast

有关这些演员的更多信息: Regular cast vs. static_cast vs. dynamic_cast