std::bitset<N>::test
bool test( std::size_t pos ) const; | (constexpr начиная с C++23) |
Возвращает значение бита в позиции pos (нумерация начинается с 0).
В отличие от operator[], выполняет проверку границ.
Параметры
| pos | - | позиция возвращаемого бита (нумерация начинается с 0) |
Возвращаемое значение
true, если запрошенный бит установлен, и false в противном случае.
Исключения
Выбрасывает std::out_of_range, если pos не соответствует допустимой позиции бита.
Пример
#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 << "The first set bit is at index " << idx << '\n';
else
std::cout << "no set bits\n";
try
{
std::bitset<0B10'1001'1010> bad;
if (bad.test(bad.size()))
std::cout << "Expect unexpected!\n";
}
catch (std::out_of_range const& ex)
{
std::cout << "Exception: " << ex.what() << '\n';
}
}
Возможный вывод:
The first set bit is at index 4 Exception: bitset::test: __position (which is 666) >= _Nb (which is 666)
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применяется к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 2250 | C++98 | поведение было неопределённым, если posне соответствовало допустимой позиции бита | в этом случае всегда выбрасывается исключение |
См. также
| обращается к указанному биту (открытая функция-член) |
|
|
(C++20) | подсчитывает количество битов со значением 1 в беззнаковом целом числе (шаблон функции) |
|
(C++20) | проверяет, является ли число целой степенью 2 (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/bitset/test