Основные типы в C ++ имеют размеры от 1 до 8 (возможно, 16) в 64-разрядных операционных системах.Это означает, что число битов, которые они занимают в памяти, не превышает 128, то есть количество битов вписывается в uint8_t
.
Теперь, предположим, я пишу некоторую функцию, которая принимает такое количество бит.Например, предположим, что это
template <typename T>
inline void clear_bit(T& x, magic_type bit_index ) {
static_assert(std::is_fundamental_v<T>, "Go away.");
x = x & ~(T{1} << bit_index);
}
Мне интересно, что использовать для magic_type
: это должен быть uint8_t
?Или, может быть, это просто int, поскольку мне все равно нужно проверять правильность, даже для случая uint8_t
, а int
является более "естественным" типом для чисел?
Toуменьшите этот вопрос в отношении вашего индивидуального мнения: один из вариантов обычно считается более идиоматическим?Если нет, можете ли вы найти достаточно веские причины для обоих вариантов?Или, может быть, предложить третий?