c++ - POD 类型的填充字节是否被复制?

标签 c++ copy-constructor

假设我有一个像这样的 POD 类型:

struct A {
    char a;
    int b;
};

在我的系统上,sizeof(A) == 8,即使 sizeof(char) == 1sizeof(b) == 4。这意味着数据结构有 3 个未使用的字节。

现在假设我们这样做

A x = ...;
A y =x;

问题:

是否保证 xy 的所有 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/

相关文章:

c++ - 需要帮助来理解轮类计算并减少我的代码中的一些脂肪

c++ - 如何使用 PortAudio 和 OpenCV 避免不一致的音频播放?

c++ - 默认、参数化、复制构造函数和赋值运算符情况下的构造函数行为

c++ - 字符串复制构造函数的段错误

c++ - Qt - 对象指针 (Class*) 具有重载运算符 << 的 QDataStream

c++ - 使用两个标准对对象 vector 进行排序

c++ - 将 QSslSocket 与 OpenSSL 服务器连接

c++ - 什么是 copy-and-swap 习语?

c++ - 自动克隆 unique_ptr

c++ - 当元素不存在于您的类中时,您如何实现复制构造函数?