【发布时间】:2014-11-07 13:09:02
【问题描述】:
3.9/2:
对于平凡的任何对象(除了基类子对象) 可复制类型 T,无论对象是否拥有类型的有效值 T,构成对象的底层字节(1.7)可以复制到 一个 char 或 unsigned char 数组。
3.9/3:
对于任何可平凡复制的类型 T,如果指向 T 的两个指针指向 不同的 T 对象 obj1 和 obj2,其中 既不 obj1 也不 obj2 不是 基类子对象,如果构成 obj1 的底层字节 (1.7) 是 复制到 obj2 中,obj2 将随后保持与 obj1 相同的值。
我正式了解这些规则,但我很感兴趣这些限制的意义何在?
【问题讨论】:
-
可能是因为空基优化。
-
@T.C.这不是很清楚。能举个例子解释一下吗?
-
@DmitryFucintv 给定
struct T {}; struct D : T { int x; };,sizeof(T) == 1,但在D中,基类子对象的大小可能为零。 -
我相信 TC 有道理,我不知道 EBO 但听起来绝对是避免基类子对象的原因
-
@DmitryFucintv 这是一个会导致问题的例子。使用
memcpy将T子对象复制到另一个D对象将覆盖x的一个字节。
标签: c++ types base-class