问题描述
如果我们有这个类:
class NotAggregate
{
double foo;
int bar;
};
大小为 16 字节,因为需要 4 字节的填充才能正确对齐。
如果我们从这个类继承
struct NotAggregateChild : public NotAggregate
{
int baz;
};
sizeof(NotAggregateChild)
仍然是 16
,因为编译器能够为 baz 成员使用父级的填充。
但是,如果 NotAggregate 是一个聚合(即我们添加 public: 或更改为结构体),则子项的 sizeof
更改为 24
。
我假设这与复制聚合的优化有关(即它可能只是完整类型的 memcpy,最终会覆盖子成员)。但这只是猜测。
谁能告诉我不允许这种优化的真正原因是什么?
https://godbolt.org/z/8jMfnnEvW
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)