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   (公开成员函数)  |