假设我有一个像这样的 POD 类型:
struct A {
char a;
int b;
};
在我的系统上,sizeof(A) == 8
,即使 sizeof(char) == 1
和 sizeof(b) == 4
。这意味着数据结构有 3 个未使用的字节。
现在假设我们这样做
A x = ...;
A y =x;
问题:
是否保证 x
和 y
的所有 8 个字节都是相同的,即使是那些未使用的 3 个字节?
等效地,如果我将一些 A
对象的底层字节传输到另一个不理解它们的含义或结构的程序,并将它们视为一个 8 字节的数组,那么其他程序可以安全地比较两个 A
是否相等?
注意:In an experiment with gcc 7 ,看来这些字节确实被复制了。我想知道这是否得到保证。
最佳答案
The implicitly-defined copy/move constructor for a non-union class X performs a memberwise copy/move of its bases and members.
N4141 中的 12.8/15 [class.copy]
因此允许填充字节中的位模式不同。
关于c++ - POD 类型的填充字节是否被复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46875027/