c++ - 在编译时初始化 c++ std::bitset

标签 c++ c++11 templates constexpr

我正在尝试初始化 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 ); 

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

最佳答案

Bitset constructor 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...

关于c++ - 在编译时初始化 c++ std::bitset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41753330/

相关文章:

c++ - libstdc++ 和 libstdc++6 有什么区别?

c++ - 无法将参数 1 从 WCHAR 转换为 const char *

c++ 我应该更喜欢 union 还是异常

c++ - c++11 中的 brace-init 是否存在任何效率问题?

c++ - 我们能否将规范性引用中未明确引用的内容应用于 C++ 标准?

c++ - 使用 Curiously Recurring Template Pattern 时如何实例化基类?

c++ - 如何使用 C++ boost 库为特定线程定义堆栈大小?

c++ - 是否有 std::shared_ptr 的非原子等价物?为什么 <memory> 中没有一个?

c++ - 元组的运行时索引

c++ - 检测 C++ lambda 是否可以转换为函数指针