Строение класса bitset. Операции создания, копирования и уничтожения

   
На этом шаге мы перечислим операции создания, копирования и уничтожения, принадлежащие классу 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

   
На следующем шаге мы рассмотрим немодифицирующие операции.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий