c++ - 编译器生成的填充复制构造函数之间的不一致
问题描述
我使用的是 x86 下的 Visual Studio 2019 社区版。使用按位复制语义的编译器生成的 Copy 构造函数倾向于复制填充。而编译器生成的不使用按位复制语义的复制构造函数往往会忽略填充。而编译器生成的复制赋值运算符总是复制填充。
再具体一点:
class Foo {
public:
int m_value;
char m_word = 'a';
};
将复制 3 个字节的填充。
class Foo {
public:
IntContainer m_int;
char m_word = 'a';
};
不会复制填充。IntContainer
具有 int 的公共成员和用户提供的复制构造函数。
这是特定于平台的还是特定于编译器的东西?这种按位复制语义与程序集级别的成员复制有什么区别?
解决方案
这是特定于平台的还是特定于编译器的东西?
就语言而言,它是特定于语言实现的。编译器可以根据平台做出不同的选择,不同的编译器可以针对同一平台做出不同的选择。
推荐阅读
- ruby-on-rails - rails drop down 如何在编辑时显示选定的值?
- sql - 将表数据存储在sql数据库中
- android - 如何禁用返回、主页、多任务物理按钮?
- python - 多臂老虎机:当随机概率小于分配给老虎机的成功概率时,为什么我们将奖励增加 1
- html - 托管网站后,图像容器在 chrome 浏览器中的高度增加
- android - 为什么 Tensorflow 对象检测 API 使用 YUV420SP 到 ARGB8888 的转换
- docker - Docker-compose:查看容器内设置了哪些环境变量
- django - 在 django 的 /admin 中找不到模板
- java - 如何找到所有空按钮并随机选择一个?
- javascript - 如何在没有 root 访问权限的机器上安装/使用 puppeteer?