【问题标题】:Trivially copyable vs trivial vs standard layout vs pod [duplicate]平凡可复制vs平凡vs标准布局vs pod [重复]
【发布时间】:2020-11-08 21:23:18
【问题描述】:

我想更多地了解这些类型。

而不是列出一个类型的要求是平凡的,标准布局等。我还想知道平凡,标准布局等意味着什么。根据我的理解(这可能是绝对错误的) ,如下:

可轻松复制——可以使用 std::memcpy 安全地复制。如果你将数据 memcpy 回一个对象,它将与原始对象相同。

Trivial – 可平凡复制,并具有一个或多个默认构造函数,所有这些构造函数要么是平凡的,要么是已删除的,并且至少有一个没有被删除(必须是平凡的)。这意味着它可以简单地复制,并且如果我们进行默认初始化(在编译时初始化,因为编译器知道默认构造函数是如何工作的)则静态初始化

标准布局 - 布局(内存中表示的数据成员的顺序、对齐方式和占用的内存/填充大小)与 C 中的相同

POD – 简单而标准的布局。此类型与 C 完全兼容。

请纠正我的任何误解,并在可能的情况下提供参考。

另外,我们什么时候想要创建平凡、可复制、标准布局、POD 的对象?示例将不胜感激。

【问题讨论】:

    标签: c++ types c++17


    【解决方案1】:

    什么是琐碎,标准布局等。

    作为普通类型意味着适用于普通类型的语言规则将适用于它。其他特殊类别的类型也是如此。例如,正如您所提到的,只有可简单复制的类型才能使用 memcpy 复制。

    另外,我们什么时候想要创建平凡、可复制、标准布局、POD 的对象?

    您提到 POD 与 C 兼容。因此,当您想要跨越语言障碍进行交互时,您希望使用与两种语言都兼容的类型。

    在某些情况下,复制和比较普通类型可能比非普通类型的相同操作更有效。因此,在提供显着改进的情况下,可能会首选琐碎类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 2012-09-17
      • 2014-12-26
      • 2011-07-07
      相关资源
      最近更新 更多