【问题标题】:Initializing c++ std::bitset at compile time在编译时初始化 c++ std::bitset
【发布时间】:2017-01-19 23:04:00
【问题描述】:

我正在尝试在编译时使用它的一些索引来初始化 std::bitset<256>,比如将 50-75 和 200-225 设置为 1。

基于http://en.cppreference.com/w/cpp/utility/bitset/bitset 看起来我的 2 个选项是:

constexpr bitset();
constexpr bitset( unsigned long long val ); 

考虑到第二个构造函数不适用于大索引,有人可以说明我将如何初始化我的位集吗?

【问题讨论】:

标签: c++ c++11 templates constexpr


【解决方案1】:

Bitset 构造函数constexpr bitset( unsigned long long val ) 受到限制,因为它不能从位置 64 向上预设位(因为 unsigned long long 是 64 位值)。任何高于 64 的位都将使用0 进行初始化,如以下示例所示(参见bitset constructors):

std::bitset<70> bl(ULLONG_MAX); // [0,0,0,0,0,0,1,1,1,...,1,1,1] in C++11

如果您还想初始化构造函数中的较高位,我认为您不会使用stringchar* 类型的初始化程序,即(3)或(4)类型的位集构造函数.

当然,对于长度为 256 的位集,初始化字符串会变长:

std::bitset<256> myBitset("111100000011111000001110000010101000100000100010010000100000000001111");
// I did not count the digits...
【解决方案2】:

您可以使用将字符串作为参数的构造函数并以这种方式对其进行初始化。

例如。以下行,将用0000000101111001 初始化b

std::bitset<16> b (std::string("0101111001"));

【讨论】:

  • 当然,这不是constexpr 构造函数。 OP 需要 constexpr 进行编译时初始化。
猜你喜欢
  • 2021-07-21
  • 2011-01-11
  • 1970-01-01
  • 2020-12-03
  • 2019-10-16
  • 2014-05-02
  • 1970-01-01
  • 2021-08-31
相关资源
最近更新 更多