这个问题已经在这里有了答案:
7年前关闭。
我想向一个类中添加一个 bool(boolean) 变量。但是,该类对大小非常敏感,因此我不愿意添加其他字段。但是,它由一堆成员组成,这些成员的宽度至少为char
,而其他单个bool
。
如果我是手写此代码,则将这些 bool(boolean) 字段实现为对象最后一个字节左右的位。由于访问必须按字节对齐,因此不会造成空间开销。
现在,编译器通常会这样做吗?我不能为他们做的唯一原因是因为它会涉及一个额外的 mask 才能使该位脱离那里。
最佳答案
不,编译器无法做到这一点,因为每个成员的地址必须不同。如果要打包固定数量的位,请使用std::bitset
。如果您需要可变数量的位数,请使用boost::dynamic_bitset
。