🐥 Почему std::chrono::duration не хранит единицы измерения?



duration<int, std::milli> не хранит информацию о миллисекундах. На самом деле это compile-time магия.

✅ Как это работает:

duration — это просто обёртка над числом. Шаблонный параметр std::milli (он же std::ratio<1, 1000>) существует только на этапе компиляции.

duration<int64_t, std::milli> ms(1000);
// В памяти: просто int64_t со значением 1000
// Информации "это миллисекунды" в рантайме НЕТ

🍴 Механизм конверсии:

Когда вы пишете duration_cast<seconds>(ms), компилятор вычисляет 1000 / 1000 = 1 на этапе компиляции через механизм std::ratio. Никаких делений в рантайме при конверсии целых периодов.
Вывод: Zero-overhead абстракция. В release-сборке duration<int, milli> — это буквально int с type safety. Но осторожно: duration_cast может обрезать дробную часть при конверсии вниз.
Просмотры: 219
Открыть в MAX Сообщить о неточности

Репосты публикации

Публикация канала

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти