Open apolukhin opened 3 years ago
Antervis, 8 марта 2017, 19:06
Возможно, тогда стоит добавить метод integral_t to_integral() const noexcept;
, где integral_t
определен как беззнаковый целочисленный тип минимального достаточного размера, чтобы вместить все биты, или unsigned long long
.
Перенос предложения: голоса +16, -0 Aвтор идеи: mrgordonfreman
Текущей реализации std::bitset не достает гибкости в преобразовании к целым числам.
Пример типичного использования.
При объявлении bitset знаем точное число бит.
Здесь тоже знаем точное число бит.
А дальше получаем проблемный код.
Размер unsigned long может быть 4 или 8 байт на разных платформах. Но нам не нужно ни 4, ни 8 байт, а только 2. Более того, to_ulong() может кидать исключения, но мы точно знаем, что исключений не будет.
Но код работает, и вроде бы ничего страшного. Потом решили запускать компилятор с флагом -Wconversion и получаем предупреждение
Тогда в коде придется использовать сужающее преобразование
Проблему решит добавление следующего метода
Также станет невозможным преобразовать bitset в число с меньшим количеством бит, и узнаем это на этапе компиляции