std::bitset<N>::bitset
(1) | ||
bitset(); |
(C++11 前) | |
constexpr bitset() noexcept; |
(C++11 起) | |
(2) | ||
bitset( unsigned long val ); |
(C++11 前) | |
constexpr bitset( unsigned long long val ) noexcept; |
(C++11 起) | |
template< class CharT, class Traits, class Alloc > explicit bitset( const std::basic_string<CharT, Traits, Alloc>& str, |
(3) | (C++23 起 constexpr) |
template< class CharT, class Traits > constexpr explicit bitset( std::basic_string_view<CharT, Traits> str, |
(4) | (C++26 起) |
template< class CharT > explicit bitset( const CharT* str, |
(5) | (C++11 起) (C++23 起 constexpr) |
从数个数据源之一构造新的 bitset:
M
位位置为对应 val 的位值,其中 M
是以下两者中的较小者:
-
N
,及
|
(C++11 前) |
|
(C++11 起) |
M
小于 N
,那么剩余位位置被初始化为零。Traits::eq()
比较字符值。bitset(n == std::size_t(-1) ? basic_string<CharT>(str) : basic_string<CharT>(str, n), 0, n, zero, one)
此构造函数可能动态分配内存,虽然实现通常会避免动态分配。 |
(C++26 前) |
此构造函数不会动态分配内存,如同只涉及 std::basic_string_view。 |
(C++26 起) |
参数
val | - | 用于初始化 bitset 的数字 |
str | - | 用于初始化 bitset 的字符串 |
pos | - | str 中的起始偏移 |
n | - | 使用来自 str 的字符数 |
one | - | 设置位于 str 中的替用字符 |
zero | - | 不设置位于 str 中的替用字符 |
异常
注解
功能特性测试宏 | 值 | 标准 | 注释 |
---|---|---|---|
__cpp_lib_constexpr_bitset |
202207L | (C++23) | 给 (3,5) 添加 constexpr 使 std::bitset 更 constexpr
|
__cpp_lib_bitset |
202306L | (C++26) | 添加重载 (4) std::bitset 的 std::string_view 接口
|
示例
#include <bitset> #include <string> #include <iostream> #include <climits> int main() { // 空构造函数 std::bitset<8> b1; // [0,0,0,0,0,0,0,0] // unsigned long long 构造函数 std::bitset<8> b2(42); // [0,0,1,0,1,0,1,0] std::bitset<70> bl(ULLONG_MAX); // [0,0,0,0,0,0,1,1,1,...,1,1,1](在 C++11 中) std::bitset<8> bs(0xfff0); // [1,1,1,1,0,0,0,0] // string 构造函数 std::string bit_string = "110010"; std::bitset<8> b3(bit_string); // [0,0,1,1,0,0,1,0] std::bitset<8> b4(bit_string, 2); // [0,0,0,0,0,0,1,0] std::bitset<8> b5(bit_string, 2, 3); // [0,0,0,0,0,0,0,1] // 使用自定义零/一数字的 string 构造函数 std::string alpha_bit_string = "aBaaBBaB"; std::bitset<8> b6(alpha_bit_string, 0, alpha_bit_string.size(), 'a', 'B'); // [0,1,0,0,1,1,0,1] // 使用自定义数字的 char* 构造函数 std::bitset<8> b7("XXXXYYYY", 8, 'X', 'Y'); // [0,0,0,0,1,1,1,1] std::cout << b1 << '\n' << b2 << '\n' << bl << '\n' << bs << '\n' << b3 << '\n' << b4 << '\n' << b5 << '\n' << b6 << '\n' << b7 << '\n'; }
可能的输出:
00000000 00101010 0000001111111111111111111111111111111111111111111111111111111111111111 11110000 00110010 00000010 00000001 01001101 00001111
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 396 | C++98 | 重载 (3) 中使用的零字符和一字符是 0 和 1(它们并不与 '0' 和 '1' 对应) | 添加参数以提供这些字符的值 |
LWG 457 | C++98 | 重载 (2) 中,M 是 N 与值 CHAR_BIT * sizeof(unsigned long)中的较小者,但 unsigned long 不保证会使用它所有的位来表示它的值 |
改成考虑值表示的位数 |
参阅
将位置为 true 或者提供的值 (公开成员函数) | |
将位置为 false (公开成员函数) |