std::chrono:: duration
|
Определено в заголовке
<chrono>
|
||
|
template
<
class
Rep,
|
(начиная с C++11) | |
Шаблон класса
std::chrono::duration
представляет временной интервал.
Он состоит из количества тактов типа
Rep
и периода такта, где период такта представляет собой время в секундах от одного такта до следующего, выраженное в виде компиляционно-рациональной
fraction
.
Единственные данные, хранящиеся в
duration
— это количество тактов типа
Rep
. Если
Rep
является числом с плавающей запятой, то
duration
может представлять доли тактов.
Period
включен как часть типа длительности и используется только при преобразовании между различными длительностями.
Содержание |
Типы членов
| Тип члена | Определение |
rep
|
Rep
, арифметический тип или класс, эмулирующий арифметический тип, представляющий количество тиков
|
period
|
Period
(до C++17)
typename
Period
::
type
(начиная с C++17)
,
std::ratio
представляющий период тика (т.е. количество долей секунды на тик)
|
Функции-члены
|
создает новый duration
(public member function) |
|
|
присваивает содержимое
(public member function) |
|
|
возвращает количество тиков
(public member function) |
|
|
[static]
|
возвращает специальное значение duration zero
(public static member function) |
|
[static]
|
возвращает специальное значение duration min
(public static member function) |
|
[static]
|
возвращает специальное значение duration max
(public static member function) |
|
реализует унарные + и -
(public member function) |
|
|
увеличивает или уменьшает количество тиков
(public member function) |
|
|
реализует составное присваивание между двумя duration
(public member function) |
Функции, не являющиеся членами класса
|
реализует арифметические операции с duration в качестве аргументов
(шаблон функции) |
|
|
(C++11)
(C++11)
(удалено в C++20)
(C++11)
(C++11)
(C++11)
(C++11)
(C++20)
|
сравнивает два duration
(шаблон функции) |
|
(C++11)
|
преобразует duration в другой с другим интервалом тиков
(шаблон функции) |
|
(C++17)
|
преобразует duration в другой с округлением вниз
(шаблон функции) |
|
(C++17)
|
преобразует duration в другой с округлением вверх
(шаблон функции) |
|
(C++17)
|
преобразует duration в другой с округлением к ближайшему, при равенстве к чётному
(шаблон функции) |
|
(C++17)
|
получает абсолютное значение duration
(шаблон функции) |
|
(C++20)
|
выполняет потоковый вывод для
duration
(шаблон функции) |
|
(C++20)
|
парсит
duration
из потока согласно предоставленному формату
(шаблон функции) |
Вспомогательные типы
Тип /* intXX */ используемый в таблице ниже означает знаковый целочисленный тип как минимум из XX бит.
| Тип | Определение |
std::chrono::nanoseconds
|
std :: chrono :: duration < /* int64 */ , std:: nano > |
std::chrono::microseconds
|
std :: chrono :: duration < /* int55 */ , std:: micro > |
std::chrono::milliseconds
|
std :: chrono :: duration < /* int45 */ , std:: milli > |
std::chrono::seconds
|
std :: chrono :: duration < /* int35 */ > |
std::chrono::minutes
|
std :: chrono :: duration < /* int29 */ , std:: ratio < 60 >> |
std::chrono::hours
|
std :: chrono :: duration < /* int23 */ , std:: ratio < 3600 >> |
std::chrono::days
(начиная с C++20)
|
std :: chrono :: duration < /* int25 */ , std:: ratio < 86400 >> |
std::chrono::weeks
(начиная с C++20)
|
std :: chrono :: duration < /* int22 */ , std:: ratio < 604800 >> |
std::chrono::months
(начиная с C++20)
|
std :: chrono :: duration < /* int20 */ , std:: ratio < 2629746 >> |
std::chrono::years
(начиная с C++20)
|
std :: chrono :: duration < /* int17 */ , std:: ratio < 31556952 >> |
Примечание: каждый из предопределенных типов длительности вплоть до
hours
охватывает диапазон как минимум ±292 года.
|
Каждый из предопределенных типов длительности
|
(начиная с C++20) |
Вспомогательные классы
|
специализирует
std::common_type
трейт
(специализация шаблона класса) |
|
|
(C++11)
|
указывает, что duration конвертируем в duration с другим периодом тиков
(шаблон класса) |
|
(C++11)
|
создает нулевое, минимальное и максимальное значения счетчика тиков заданного типа
(шаблон класса) |
поддержка форматирования для
duration
(специализация шаблона класса) |
|
|
поддержка хеширования для
std::chrono::duration
(специализация шаблона класса) |
Вспомогательные специализации
|
template
<
class
Rep,
class
Period
>
constexpr
bool
enable_nonlocking_formatter_optimization
<
chrono
::
duration
<
Rep, Period
>>
|
(начиная с C++23) | |
Эта специализация
std::enable_nonlocking_formatter_optimization
позволяет эффективную реализацию
std::print
и
std::println
для вывода объекта
chrono::duration
когда параметр шаблона
Rep
это позволяет.
Литералы
|
Определено во встроенном пространстве имён
std::literals::chrono_literals
|
|
|
(C++14)
|
литерал
std::chrono::duration
представляющий часы
(функция) |
|
(C++14)
|
литерал
std::chrono::duration
представляющий минуты
(функция) |
|
(C++14)
|
литерал
std::chrono::duration
представляющий секунды
(функция) |
|
(C++14)
|
литерал
std::chrono::duration
представляющий миллисекунды
(функция) |
|
(C++14)
|
литерал
std::chrono::duration
представляющий микросекунды
(функция) |
|
(C++14)
|
литерал
std::chrono::duration
представляющий наносекунды
(функция) |
|
Примечание: литеральные суффиксы
|
(начиная с C++20) |
Примечания
Фактический временной интервал (в секундах), который содержит объект длительности
d
, приблизительно равен
d.
count
(
)
*
D
::
period
::
num
/
D
::
period
::
den
, где
D
имеет тип
chrono::duration<>
, а
d
является объектом такого типа.
| Макрос тестирования возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_chrono_udls
|
201304L
|
(C++14) | Пользовательские литералы для временных типов |
Пример
Этот пример показывает, как определить несколько пользовательских типов длительности и конвертировать между типами:
#include <chrono> #include <iostream> using namespace std::chrono_literals; template<typename T1, typename T2> using mul = std::ratio_multiply<T1, T2>; int main() { using microfortnights = std::chrono::duration<float, mul<mul<std::ratio<2>, std::chrono::weeks::period>, std::micro>>; using nanocenturies = std::chrono::duration<float, mul<mul<std::hecto, std::chrono::years::period>, std::nano>>; using fps_24 = std::chrono::duration<double, std::ratio<1, 24>>; std::cout << "1 second is:\n"; // integer scale conversion with no precision loss: no cast std::cout << std::chrono::milliseconds(1s).count() << " milliseconds\n" << std::chrono::microseconds(1s).count() << " microseconds\n" << std::chrono::nanoseconds(1s).count() << " nanoseconds\n"; // integer scale conversion with precision loss: requires a cast std::cout << std::chrono::duration_cast<std::chrono::minutes>(1s).count() << " minutes\n"; // alternative to duration_cast: std::cout << 1s / 1min << " minutes\n"; // floating-point scale conversion: no cast std::cout << microfortnights(1s).count() << " microfortnights\n" << nanocenturies(1s).count() << " nanocenturies\n" << fps_24(1s).count() << " frames at 24fps\n"; }
Вывод:
1 second is: 1000 milliseconds 1000000 microseconds 1000000000 nanoseconds 0 minutes 0 minutes 0.82672 microfortnights 0.316887 nanocenturies 24 frames at 24fps