std::bitset<N>::test
来自cppreference.com
<tbody>
</tbody>
bool test( std::size_t pos ) const; |
(C++23 起为 constexpr) |
|
返回位于位置 pos 的位(从 0 计数)的值。
与 operator[] 不同,它会进行边界检查。
参数
| pos | - | 要返回的位的位置(从 0 计数) |
返回值
在位于位置 pos 的位被设置时返回 true,否则返回 false。
异常
在 pos 未对应有效位位置时抛出 std::out_of_range。
示例
运行此代码
#include <bit>
#include <bitset>
#include <cassert>
#include <iostream>
#include <stdexcept>
int main()
{
std::bitset<10> b1("1111010000");
std::size_t idx = 0;
while (idx < b1.size() && !b1.test(idx))
++idx;
assert(static_cast<int>(idx) == std::countr_zero(b1.to_ulong()));
if (idx < b1.size())
std::cout << "第一个设置的位的索引是 " << idx << '\n';
else
std::cout << "没有设置任何位\n";
try
{
std::bitset<0B10'1001'1010> bad;
if (bad.test(bad.size()))
std::cout << "不符合预期!\n";
}
catch (std::out_of_range const& ex)
{
std::cout << "异常: " << ex.what() << '\n';
}
}
可能的输出:
第一个设置的位的索引是 4
异常: bitset::test: __position (which is 666) >= _Nb (which is 666)
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 2250 | C++98 | pos 未对应有效位位置时的行为未定义
|
此时始终会抛出异常 |
参阅
| 访问指定的位 (公开成员函数) | |
(C++20) |
计量无符号整数中为 1 的位的数量 (函数模板) |
(C++20) |
检查一个数是否为 2 的整数次幂 (函数模板) |