[英]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.