繁体   English   中英

为什么 std::bitset 只采用 constexpr 值?

[英]Why does std::bitset only takes constexpr value?

我想在运行时决定位集的大小。
但是std::bitset<N>只接受 N 的 constexpr 值,甚至不接受 const 值。
这意味着必须在编译之前确定位集的大小。

我知道std::vector为 bool 数组提供优化,
但它缺少我需要的那些有用的 bitset 成员。

问题 1:为什么 N 必须是 constexpr 值?
好吧,我猜那是因为 bitset 是模板,但这仍然带来很大的不便。
Bitset可能是一个类而不是模板。
它的构造函数可以将 size_t 作为参数,而不是我可以创建可变长度的位集。
同样的问题也适用于std::array
可能是std::array<type> foo(size, values)

问题 2:是否有任何“黑客”可以让我创建可变长度的位集?
考虑到模板的工作原理,我很确定不会有。
但也许,有一些聪明的技巧:)
如果没有,我将不得不使用std::vector<bool>并自己实现 bitset 成员。

为什么 N 必须是 constexpr 值?

你是对的。 std::bitsetstd::array大小都指定为模板参数,因此不能在运行时设置。

但是,过去有一些建议在 C++ 标准中引入动态数组。 其中之一被称为std::dynarray 最终,它不会被引入到标准中,但您可以在这里看到对其生命周期的更详细的描述。

是否有任何“黑客”可以让我创建可变长度的位集?

如果您有权访问 Boost 库,则可以使用它的dynamic_bitset

Bitset 可能是一个类而不是模板。

它是有目的的,如果那不是你的,你只需要使用不同的东西。

如果您想存储单个位,这意味着您喜欢存储可变大小的bool ,您只需使用std::vector< bool >

如果没有,我将不得不使用 std::vector 并自己实现 bitset 成员。

位集是位的容器。 那么你自己实现 bitset 是什么意思?

暂无
暂无

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

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