На этом шаге мы перечислим операции создания, копирования и уничтожения, принадлежащие классу bitset.
Начиная с этого шага, мы перечислим операции, поддерживаемые классом bitset.
Операции создания, копирования и уничтожения
Для битовых полей определено несколько специальных конструкторов. С другой стороны, для них не определены специальный копирующий
конструктор, оператор присваивания и деструктор. Это означает, что присваивание и копирование битовых полей производится стандартными
операциями поразрядного копирования.
bitset<paзмер>::bitset ()
Конструктор по умолчанию. Создает битовое поле, в котором все биты инициализированы нулями. Пример:
bitset<50> flags; // Флаги: 0000...000000 - всего 50 нулевых битов
bitset<размер>::bitset (unsigned long value)
Создает битовое поле и инициализирует его битами целочисленного значения value.
Если количество битов в value слишком мало, недостающие начальные биты инициализируются нулями. Пример:
bitset<50> flags(7); // Флаги: 0000...000111
explicit bitset<размер>::bitset (const string& str) bitset<размер>::bitset (const string& str, string::size_type str_idx) bitset<размер>::bitset (const string& str, string::size_type str_idx, string::size_type str_num)
Все формы возвращают битовое поле, инициализированное строкой str или входящей в нее подстрокой.
Строка или подстрока может содержать только символы "0" и "1".
Параметр str_idx определяет индекс первого символа str, используемого для инициализации.
Если параметр str_num не задан, используются все символы от позиции str_idx до конца строки.
Если количество символов в строке или подстроке меньше необходимого, начальные биты инициализируются нулями.
Если количество символов в строке или подстроке больше необходимого, лишние символы игнорируются.
Если выполняется условие str_idx>str.size(), генерируется исключение out_of_range.
Если хотя бы один символ отличен от "0" и "1", генерируется исключение invalid_argument.
Обратите внимание: конструктор объявлен в виде шаблонной функции класса, из-за чего отсутствует неявное преобразование типа первого
параметра из const char* в string.
Замечание.
Вероятно, это объясняется ошибкой в стандарте, поскольку в ранних версиях стандарта допускалось использование конструкций вида
bitset2 flags("1010101"). При преобразовании конструктора в шаблон для разных строковых типов этот механизм автоматического
преобразования типа был случайн утрачен. В настоящее время рассматривается предложение по исправлению этой ошибки.
bitset<50> flags(string("1010101")); // Флаги: 0000...0001010101 bitset<50> fiags(string("1111000")); // Флаги: 0000...0001111000
На следующем шаге мы рассмотрим немодифицирующие операции.