假设我没有数据类:
struct Empty { /*some methods here*/ };
和派生类
struct Derived: Empty { int a; int b; char c; .... }__attribute__((packed));`
空类的对象具有size = 1.派生类的空部分通常具有0大小.据了解,编译器看到,基类空类没有数据,所以它可以优化大小为空,以防它是“内部”派生,但不需要这样做的标准.
所以问题是:
我可以在编译时确定Derived类的空白部分并不真正占用内存.
我知道我可以像sizeof(Derived)= sizeof(a)sizeof(b)一样检查…但是它太冗长了,有几个类,如Derived.有更优雅的解决方案吗?
解决方法
您可以使用
std::is_empty
来确保您继承的类是零大小:
static_assert(std::is_empty<Empty>{});
如果是,empty base optimization是guaranteed to take place for standard-layout classes.
I understand that I can do check like
sizeof(Derived) = sizeof(a) + sizeof(b) ...
But It is too verbose. Is there more elegant solution?
这不能正常工作,因为您需要考虑填充和最终属性(如打包).
原文地址:https://www.jb51.cc/c/110587.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。