当前位置: 首页 > 知识库问答 >
问题:

C++11中的类型什么时候允许被memcped?

郭皓
2023-03-14
    null

我想知道的是类型何时“按位可复制”的确切要求。

    null

附:当然,memcpy的结果必须是正确的。我知道我可以在任何情况下都做,但不正确。

共有1个答案

田文景
2023-03-14

is_trivially_copyable ::value 为true时,可以使用memcpy复制T类型的对象。类型不需要是标准布局类型。“简单可复制”的定义本质上是这样做是安全的。

使用memcpy复制是安全的,但不是标准布局的类示例:

struct T {
  int i;
private:
  int j;
};

因为这个类对不同的非静态数据成员使用不同的访问控制,所以它不是标准的布局,但它仍然是可以复制的。

 类似资料:
  • 在学习和使用spring-boot之后,我了解了spring-boot ConditionalOnClass的用法和逻辑,我的问题是: < li >为什么“因为这个注释是通过加载类字节码来解析的,所以在这里指定最终可能不在类路径上的类是安全的”。 < li >与此相关的JVM规范在哪里? https://github.com/spring-projects/spring-boot/blob/mas

  • 问题内容: 作为实验,我尝试扩展-array,如下所示: 在类本身中添加一些与排序,交换,子数组构建等有关的方法。但是我在编译时遇到了这个错误: 我很好奇:为什么Java不允许扩展数组? 问题答案: 扩展基本类型(例如a 或数组)会打开安全漏洞。如果Java允许您扩展数组,则采用数组的方法将变得不安全。这就是字符串为,而数组根本不能扩展的原因。 例如,您可以重写该方法,并返回不正确大小的数组。这有

  • 当重写超类的方法时,Java 允许返回类型是协变的。 为什么在覆盖方法时不允许相反的逆变参数类型?

  • 问题内容: ArrayList仅接受引用类型作为其元素,而不接受原始数据类型。尝试这样做时会产生编译时错误。 这背后的概念是什么?似乎是一个限制,不是吗? 问题答案: Java的所有收集类都存储它们收集的对象的内存位置。基本值不 适合 同一定义。 为避免此问题,JDK5及更高版本具有 自动装箱功能 -其中,将原语转换为适当的对象,然后在添加或从集合中读取原语时将其转换回原样。请参阅有关此主题的官方

  • 问题内容: 我想知道为什么允许它具有不同类型的对象引用?例如; 您能否举一个使用不同类型的对象引用有用的示例? 编辑: 问题答案: 这是多态性和抽象的核心。例如,这意味着我可以写: …并处理 任何 类型的输入流,无论是来自文件,网络,内存中的输入流。还是同样地,如果您有一个,则可以不考虑其实现而要求其元素0。 将子类的实例视为超类的实例的能力称为Liskov的替代原理。它允许松散耦合和代码重用。

  • 在C++98中,以下代码无法编译,因为ifstream没有复制构造函数: 但是,在C++11中使用多个GCC版本时,编译时不会出现警告。这是什么原因?