В среде, использующей типы std::int* (например, std::int16_t), а также типы std::int_fast* (например, std::int_fast16_t), могут существовать общие правила, согласно которым один может быть лучше другого. Для простоты этой статьи я буду называть типы std::int* «точными» типами, а типы std::int_fast* — «быстрыми».
В качестве примера, обычно лучше всего использовать точные типы для элементов массива, поскольку ожидается, что они будут использовать меньше байтов и, следовательно, появится больше возможностей для улучшения кэширования. Другой пример: когда элементы считываются из этого массива, их можно преобразовать в быстрый тип для выполнения арифметических действий.
Код: Выделить всё
void foo() {
std::array arr {};
// ...
std::int_fast16_t e = arr[index];
}
Менее очевидно, какой тип больше подходит для ключевых типов std::set, std::unordered_set или связанных типов карт. Имеет ли смысл предполагать, что внутреннее хранилище контейнера в целом выигрывает от компактности конкретных типов, таких как случай массива?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... t-fast16-t