std::bitset<N>::bitset
来自cppreference.com
| (1) | (C++11 起为 noexcept) (C++11 起为 constexpr) |
|
| (2) | ||
| (C++11 前) | ||
| |
(C++11 起) | |
| (3) | (C++23 起为 constexpr) |
|
| (4) | (C++26 起) | |
| (5) | (C++11 起) (C++23 起为 constexpr) |
|
从数个数据源之一构造新的 bitset:
1) 默认构造函数。构造所有位都设为零的
bitset。2) 从无符号整数
val 构造 bitset。 给定
unsigned long(C++11 前)unsigned long long(C++11 起) 的值表示中的位数为 S:
- 初始化前(最右、最低有效)
std::min(S, N)位位置为val的对应位值。 - 如果
S小于N,那么剩余位位置被初始化为零。
3) 用
str 中的字符构造 bitset。能提供可选的起始位置 pos 和长度 n,以及代表用于设置(one)和不设置(zero)位的各个替代值的字符。用 Traits::eq() 比较字符值。 初始化字符串的有效长度是
std::min(n, str.size() - pos)。4) 同 (3),但用 std::basic_string_view 代替 std::basic_string。
5) 同 (3),但用
const CharT* 代替 std::basic_string。
|
等价于 |
(C++26 前) |
|
等价于 |
(C++26 起) |
参数
| val | - | 用于初始化 bitset 的数值
|
| str | - | 用于初始化 bitset 的字符串
|
| pos | - | str 中的起始偏移
|
| n | - | 使用来自 str 的字符数
|
| zero | - | 在 str 中表示已设置位的代用字符
|
| one | - | 在 str 中表示未设置位的代用字符
|
异常
3,4) 在
pos > str.size() 时抛出 std::out_of_range,在有任何 zero 和 one 以外的字符时抛出 std::invalid_argument。5) 在有任何
zero 和 one 以外的字符时抛出 std::invalid_argument。注解
| 功能特性测试宏 | 值 | 标准 | 功能特性 |
|---|---|---|---|
__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()
{
// 空构造函数 (1)
std::bitset<8> b1; // [0,0,0,0,0,0,0,0]
// unsigned long long 构造函数 (2)
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]
// 字符串构造函数 (3)
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]
// 使用自定义零/一数字的字符串构造函数 (3)
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* 构造函数 (5)
std::bitset<8> b7("XXXXYYYY", 8, 'X', 'Y'); // [0,0,0,0,1,1,1,1]
std::cout << "b1: " << b1 << "\nb2: " << b2 << "\nbl: " << bl
<< "\nbs: " << bs << "\nb3: " << b3 << "\nb4: " << b4
<< "\nb5: " << b5 << "\nb6: " << b6 << "\nb7: " << b7 << '\n';
}
可能的输出:
b1: 00000000
b2: 00101010
bl: 0000001111111111111111111111111111111111111111111111111111111111111111
bs: 11110000
b3: 00110010
b4: 00000010
b5: 00000001
b6: 01001101
b7: 00001111
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 396 | C++98 | 重载 (3) 中使用的零字符和一字符是 0 和 1(它们并不与 '0' 和 '1' 对应)
|
添加参数以提供这些字符的值 |
| LWG 457 | C++98 | 重载 (2) 中,S 是 CHAR_BIT * sizeof(unsigned long),但 unsigned long 不保证会使用它所有的位来表示它的值
|
改成考虑值表示的位数 |
| LWG 2250 | C++98 | pos > str.size() 是 true 时的行为未定义
|
此时始终会抛出异常 |
参阅
将位置为 true 或者给定的值 (公开成员函数) | |
将位置为 false (公开成员函数) |