![](/img/trans.png)
[英]How can I cast an std::bitset<N> to an std::bitset<M>?
[英]std::bitset<N> implementation causes size overheard
看起来std::bitset<N>
现在是一个unsigned longs
数组,这意味着当 N 很小时会有(沉重的?)开销。 sizeof(std::bitset<8>)
是8 bytes
!
底层数组本身的类型不是template
参数是否有原因? 为什么实现在更合适的时候不使用uint32_t/16_t/8_t
? 我在实施中没有看到任何限制这一点的东西吗?
我猜我错过了一个特定的原因,但不确定如何寻找它或者根本没有原因? 由于这是一个如此简单的container
,我无法理解这里似乎如何避免C++
的零开销原则。
GCC 实施: https://gcc.gnu.org/onlinedocs/gcc-4.6.2/libstdc++/api/a00775_source.html
我相信 clang 是相似的(使用 sizeof 来确认)
我无法理解这里似乎如何避免 C++ 的零开销原则。
零开销原则是一个原则,不是C++的绝对规则。
许多人在编译时固定容量有用的情况下使用std::vector
。 这样的类型可以只有两个指针而不是三个,因此可以小 50%。 许多人使用std::string
的上下文中,不可变字符串即使不是更好也同样有效; 它会减少字符串的大小(忽略 SSO),以及它的复杂性。 等等。
这些都代表了相对于标准类型的低效率。 没有标准库类型可以处理所有可能的使用场景。 这些类型的目标是广泛有用,而不是完美。
没有什么可以阻止某人使用具有用户提供的基础类型的完全相同的接口编写位集样式类型。 但是标准没有这种类型。
事实上,没有什么可以阻止bitset
的实现根据给定的位数选择底层类型。 您的实现不会那样做,但它可以做到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.