如何解决为什么从聚合继承时对齐填充规则不同?
如果我们有这个类:
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 举报,一经查实,本站将立刻删除。