Итак, я наткнулся на Когда следует использовать целочисленные типы C ++ с фиксированной шириной и как они влияют на производительность? и Следует ли использовать cstdint?, где перечислены преимущества и недостатки целочисленных типов фиксированной ширины, как определено в <cstdint>
.
Мне нравится кодировать предполагаемый диапазон переменной в ее тип, но я также не хочу заставлять ЦП выполнять дополнительные операции только для использования uint16_t
вместо простого int
, когда мне не обязательно иметь переменную держит ровно 16 бит.
Я также читал о таких типах, как std::uint_fast16_t
и так далее. Насколько я понимаю, использование этого типа должно гарантировать, что я гарантированно смогу сохранить 16-битное число в этой переменной, но мне никогда не придется платить штрафы во время выполнения за использование этого типа, поскольку на каждой архитектуре, где, например, uint32_t
будет быстрее, это будет использоваться для меня автоматически.
Это оставляет меня с вопросом: кроме случая, когда мне действительно нужна переменная с точной разрядностью, есть ли какие-либо недостатки использования std::uint_fast16_t
вместо unsigned int
?
РЕДАКТИРОВАТЬ: это, конечно, предполагает, что потребление памяти не является проблемой. Если бы это было так, я бы использовал вместо этого std::uint_least16_t
.
uint32_t
быстрее. - person Richard Critten   schedule 05.05.2021uint_fast16_t
может быть не ровно 16 бит. Это будет самый «быстрый» тип с минимум 16 битами. - person Adrian Mole   schedule 05.05.2021fast
, кроме дополнительного размера. - person François Andrieux   schedule 05.05.2021