首页 >后端开发 >C++ >memcpy 可以用于在 C 中构造可简单复制的对象吗?

memcpy 可以用于在 C 中构造可简单复制的对象吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-19 20:32:02642浏览

Can memcpy be Used to Construct a Trivially-Copyable Object in C  ?

使用 memcpy 构造可简单复制的对象

使用 C 时,开发人员可能会遇到有关使用 memcpy 复制对象的有效性的问题对象的表示字节。具体来说,会产生这种行为是否构成对象构造或赋值的疑问。

这个问题仍未解决,因为 C 标准没有明确解决这种情况。然而,某些提案和讨论为此事提供了指导。

官方标准的视角

当前的 C 14 草案标准指出:“创建一个对象 [.. .] 通过定义、新表达式或需要时的实现。”

此外,解决简单可复制类型的复制(例如,3.9 [basic.types])主要关注已实例化对象之间的复制。

提案 p0593

提案 p0593 试图解决这个问题并定义了低级对象操作的对象的隐式创建。它建议在新分配的存储中自动创建足够简单类型的对象,以确保良好定义的行为。

根据 p0593,以下操作应隐式创建对象:

  • 创建char、unsigned char 或 std::byte
  • malloc、calloc、realloc、operator new 数组, operator new[]
  • std::allocator::allocate
  • memmove(将源存储复制到临时区域后)

其他注意事项

关于 [ub] 类型双关以避免复制的讨论进一步凸显了复杂性

总体而言,当前有关此主题的指南可以解释,但诸如 p0593 之类的提案旨在为这些操作提供清晰度和定义的行为。

以上是memcpy 可以用于在 C 中构造可简单复制的对象吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn