На этом шаге мы рассмотрим использование оператора [].
Оператор [] может применяться в классе bitset в следующем контексте:
bitset<размер>::reference bitset<размер>::operator[] (size_t idx)
bool bitset<размер>::operator[] (size_t idx) const
Чтобы возвращаемое значение могло использоваться как модифицируемый объект (l-значение), первая форма для неконстантных битовых полей использует специальные временные объекты - заместители (proxy). Подробности приводятся далее.
Перед вызовом необходимо убедиться в том, что idx представляет действительный индекс; в противном случае вызов приводит к непредсказуемым последствиям.
При вызове для неконстантных битовых полей оператор [] возвращает специальный временный объект типа bitset<>::reference. Этот объект используется в качестве заместителя для выполнения некоторых действий с битом, полученным при помощи оператора [].
В частности, для reference определены пять перечисленных ниже операций.
Примеры выполнения операций с возвращаемым значением оператора []:
bitset<50> flags; flags[42] = true; // Установка бита 42 flags[13] = flags[42]; // Присваивание значения бита 42 биту 13 flags[42].flip(); // Перевод бита 42 в противоположное состояние if (flags[13]) { // Если бит 13 установлен, flags[10] = -flags[42]; // присвоить дополнение бита 42 биту 10 }
На следующем шаге мы рассмотрим cоздание модифицированных битовых полей.