当前位置:  开发笔记 > 编程语言 > 正文

派生类内基类的大小

如何解决《派生类内基类的大小》经验,为你挑选了1个好方法。

假设我有没有数据的类:

struct Empty {
  /*some methods here*/
};

和派生类

struct Derived: Empty {
  int a;
  int b;
  char c;
  ....
}__attribute__((packed));`

Empty类的对象具有size = 1.派生类的空部分通常具有0大小.据我所知,编译器看到基类Empty类没有数据,因此它可以优化Empty的大小,以防它是"内部"派生但是不需要按标准执行.

所以问题是:

我可以在编译时以某种方式确定Derived类的Empty部分并不真正占用内存.

我知道我可以做的检查,sizeof(Derived) = sizeof(a) + sizeof(b) ...但它太冗长,有几个类像Derived.有更优雅的解决方案吗?



1> Vittorio Rom..:

您可以使用std::is_empty以确保您继承的类是零大小的:

static_assert(std::is_empty{});

如果是,则保证对标准布局类进行空基优化.


我明白我可以做的检查sizeof(Derived) = sizeof(a) + sizeof(b) ...但是它太冗长了.有更优雅的解决方案吗?

这不能正常工作,因为您需要考虑填充和最终属性,例如packed.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有