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 может обрезать дробную часть при конверсии вниз.📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом