如果我们有两个 不相容的结构或联合 ,但对象 两种类型都有 相同大小的对象表示 我可以吗 如果我接受对象,则获取未定义/未指定/明确定义的行为 表示其中一种类型的某个对象并“重新解释”它 作为另一种类型。
这个问题 memcpy可以用于打字吗? 特别是 EOF的答案 虽然它们侧重于不同的细节,但它包含了相当多的相关信息和讨论。特别是,
memcpy()
然而,就结构和工会而言,我们还必须考虑 会员 。他们的类型可以提供陷阱表示,如果他们这样做,那么 memcpy() 可能导致包含这种表示的一个或多个成员。读取当前包含陷阱表示的成员的值会生成UB。
此外,即使假设示例中的两种结构类型具有相同的大小,也未指定其布局的相关详细信息。特别是,在您的示例代码中,如果是,那将是令人惊讶的 的 都 强> (1)两个结构具有相同的尺寸,(2)第二个 printf call打印代码注释建议的结果。 (在纠正格式以正确匹配数据之后;现在 printf 由于格式和变量不匹配而具有UB。)
printf
总的来说,您的示例代码并不严格符合要求。其行为的方面未指定,并且可能但不确定它表现出未定义的行为。