std:bitset c++外部初始化



我想在给定的常量数据数组上封装或强制转换std:bitset或者用不同的方式表示,用外部数据初始化位集。

用户知道比特的索引,然后他可以通过bitset.test(i)来检查该索引。数据很大,所以必须高效。(机器比特顺序无关紧要,我们可以用正确的方式存储它(。这就是我尝试的:

constexpr uint32_t          data[32] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32};
constexpr std::bitset<1000>  bset(1); //bit bitset initialized with a value here
constexpr  std::bitset<1000> bset2(data); //init it with our data, this is not working

由数据保持的位数为32*32=1024。使用我的比特集,我可以处理几乎所有的范围。用户不需要超过1000。有人能向我解释一下,在我上面用bset2的例子中,cpp是如何做到这一点的吗?

不幸的是,std::bitset没有适合您需要的设计。

它没有被设计成聚合(就像std::array一样(,因此聚合初始化是不可能的(而且用std::memcpy将比特复制到其中也是未定义的行为(。

constexpr构造函数中只能使用一个unsigned long long

operator []set方法将在C++23中变为constexpr,因此之后会有一种方法。

只需使用constexpr原始数组或std::array,然后添加位访问方法即可。

最新更新