Namespaces
Variants

std::bitset<N>:: operator[]

From cppreference.net
Utilities library
bool operator [ ] ( std:: size_t pos ) const ;
(1) (constexpr начиная с C++11)
reference operator [ ] ( std:: size_t pos ) ;
(2) (constexpr начиная с C++23)

Обращается к биту в позиции pos .

1) Возвращает значение бита.
2) Возвращает объект типа std::bitset::reference , который позволяет изменять значение.

Если pos < size ( ) равно false , поведение не определено.

(до C++26)

Если pos < size ( ) равно false :

  • Если реализация является защищённой , происходит нарушение контракта . Более того, если обработчик нарушения контракта возвращает управление при семантике оценки "observe", поведение не определено.
  • Если реализация не является защищённой, поведение не определено.
(начиная с C++26)

Содержание

Параметры

pos - позиция возвращаемого бита

Возвращаемое значение

1) Значение запрашиваемого бита.
2) Объект типа std::bitset::reference , который позволяет производить запись в запрашиваемый бит.

Исключения

Ничего не выбрасывает.

Пример

#include <bitset>
#include <cstddef>
#include <iostream>
int main()
{
    std::bitset<8> b1{0b00101010}; // двоичный литерал для 42
    for (std::size_t i = 0; i < b1.size(); ++i)
        std::cout << "b1[" << i << "]: " << b1[i] << '\n';
    b1[0] = true; // изменяет первый бит через bitset::reference
    std::cout << "After setting bit 0, b1 holds " << b1 << '\n';
}

Вывод:

b1[0]: 0
b1[1]: 1
b1[2]: 0
b1[3]: 1
b1[4]: 0
b1[5]: 1
b1[6]: 0
b1[7]: 0
After setting bit 0, b1 holds 00101011

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 11 C++98 1. описание отсутствовало в стандарте C++
2. была только неконстантная перегрузка
1. описание добавлено
2. добавлена константная перегрузка
LWG 907 C++98 поведение чтения бита в позиции pos было эквивалентно
поведению test(pos) , но test() может выбрасывать исключения
избегает упоминания test()

Смотрите также

обращается к конкретному биту
(public member function)