繁体   English   中英

std:bitset c++ 外部初始化

[英]std:bitset c++ external initialization

我想在给定的常量数据数组上包装或强制转换 std:bitset 或以不同的方式制定它,用外部数据初始化一个位集。

用户知道他可以通过bitset.test(i)检查的位的索引。 数据很大,所以它必须是高效的。 (机器bitorder无所谓,我们可以用正确的方式存储)。 这就是我尝试过的:

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。 使用我的 bitset,我可以解决几乎所有范围的问题。 用户不需要超过 1000 个。有人可以向我解释一下在我上面的示例中使用 bset2 在 cpp 中这是如何完成的吗?

不幸的是std::bitset没有适合你想要的设计。

它不是设计为聚合(如std::array是),因此聚合初始化是不可能的(并且使用std::memcpy将位复制到其中是未定义的行为)。

constexpr构造函数中它只需要一个unsigned long long

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

只需使用constexpr原始数组或std::array并在此之前添加位访问方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM