Выбор точности в chrono::duration
- это компромисс между точностью и диапазоном, и он не влияет на производительность.
Каждый из хронографических часов имеет «собственную точность», задокументированную их часами.вложенный duration
тип, и это то, что он есть (не может быть изменен клиентом).Если вы хотите, чтобы time_point
или duration
отличались от этого (после вызова now()
), стоимость равна одному умножению или делению, чтобы получить желаемую точность.И как только вы получите желаемую точность, вам больше не придется использовать эту точность.
Чем выше точность, обычно , тем меньше ваш диапазон.Защита от переполнения отсутствует, если вы не используете пользовательский Rep
, который обеспечивает такую проверку.Вы можете проверить свой диапазон с помощью статических duration::min()/max()
функций-членов.
Источник ошибки времени выполнения может возникнуть при преобразовании длительности курсора с очень большим, но в диапазоне значением в более высокую точность, что приводит кпереполнение с более высокой точностью.Например, если у вас есть значение microseconds
, превышающее 292 года, и конвертируйте его в nanoseconds
, вы получите переполнение.