bitset是否保证连续性?

时间:2016-04-08 13:41:24

标签: c++ c++11 c++14 memory-layout

快速简单的问题:std::bitset保证在记忆中是连续的吗?

我知道它遵守CopyConstructible和CopyAssignable概念,但是它也是一个ContiguousContainer(或类似的东西),如std::vector

除了填充之外,我还想在这样的结构上进行按位运算:

struct tmp
{
    std::bitset<32> b;
    unsigned int    c;
};

因此b的邻接非常重要。当然,这会导致知道std::bitset是否是标准布局类,以便每个按位操作都有效。

2 个答案:

答案 0 :(得分:9)

std::bitset<>标准中没有要求具有任何特定布局或位顺序。

将所需位数指定为模板参数这一事实意味着将内存分配为一个连续块(数组成员)。因为分配多个块会更复杂,效率更低并且没有用处。

尽管如此,我并不建议或认可访问std::bitset<>的内部陈述。

答案 1 :(得分:1)

没有这样的保证。根据我的经验,std::bitset有一个尴尬的界面,所以我也没有看到以不确定的方式使用它的重点。

只需编写类似于类的bitset,并提供所需的布局和存储保证。

就个人而言,我很享受。而且我发现bitset界面(特别是构造/序列化/反序列化)特别好,所以我甚至不会感到内疚。 (我想写一个有效的计数,任何,所有,没有一点是有点工作,但其他一切都是微不足道的。如果你正在编写汇编指令/使用SSE intrinstics,你可能能够匹配/超过你的编译器&#39;无论如何实施)