空类 Zero Sized Types
Vec 中对空类的优化
C++ 中的空类
先看代码示例:
#include <cassert>
#include<iostream>
class Empty { };
class ContainsEmpty {
public:
int x;
Empty e;
};
class WithEBO: public Empty {
public:
int x;
};
int main() {
Empty e1;
Empty e2;
assert(&e1 != &e2);
assert(sizeof(Empty) == 1);
assert(sizeof(ContainsEmpty) == 8);
assert(sizeof(WithEBO) == sizeof(int));
return 0;
}
尽管上面的 Empty
类是一个空的类, 它仍然要占用1个字节的内存.
C++ 对空类的优化: EBO Empty Base Optimization
通过横向对比可以看到, 这两种语言在处理空类的问题上的方法并不相同, 而Rust中的做法更符合常理, 心智负担也更小.