std::chrono::duration — cppreference.com
Материал из cppreference.com
<tbody> </tbody>
| Определено в заголовочном файле |
||
|
|
(начиная с 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 функция-элемент) [править] | |
| присваивает содержимое (public функция-элемент) [править] | |
| возвращает количество тиков (public функция-элемент) [править] | |
[static] |
возвращает специальное нулевое значение длительности (public static функция-элемент) [править] |
[static] |
возвращает специальное минимальное значение длительности (public static функция-элемент) [править] |
[static] |
возвращает специальное максимальное значение длительности (public static функция-элемент) [править] |
| реализует унарный + и унарный - (public функция-элемент) [править] | |
| увеличивает или уменьшает количество тактов (public функция-элемент) [править] | |
| реализует составное присваивание между двумя длительностями (public функция-элемент) [править] |
Функции, не являющиеся элементами
| реализует арифметические операции с duration в качестве аргументов (шаблон функции) [править] | |
(C++11)(C++11)(удалено в C++20)(C++11)(C++11)(C++11)(C++11)(C++20) |
сравнивает два duration (шаблон функции) [править] |
(C++11) |
преобразует duration в другой 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>>
|
Примечание: каждый из предопределённых типов duration до hours охватывает диапазон не менее ±292 лет.
|
Каждый из предопределённых типов duration |
(начиная с C++20) |
Вспомогательные классы
Литералы
Определены в пространстве имён | |
(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) |
Примечание
Фактический интервал времени (в секундах), удерживаемый объектом duration d, примерно равен d.count() * D::period::num / D::period::den, где D имеет тип chrono::duration<>, а d объект этого типа.
| Макрос Тестирования функциональности | Значение | Стандарт | Функциональность |
|---|---|---|---|
__cpp_lib_chrono_udls |
201304L |
(C++14) | Пользовательские литералы для типов времени |
Пример
В этом примере показано, как определить несколько настраиваемых типов duration и выполнить преобразование между типами:
#include <iostream> #include <chrono> 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 секунда это:\n"; // преобразование целочисленного масштаба без потери точности: без приведения std::cout << std::chrono::milliseconds(1s).count() << " миллисекунд\n" << std::chrono::microseconds(1s).count() << " микросекунд\n" << std::chrono::nanoseconds(1s).count() << " наносекунд\n"; // преобразование целочисленного масштаба с потерей точности: требуется приведение std::cout << std::chrono::duration_cast<std::chrono::minutes>(1s).count() << " минут\n"; // преобразование масштаба с плавающей запятой: без приведения std::cout << microfortnights(1s).count() << " microfortnights\n" << nanocenturies(1s).count() << " нановека\n" << fps_24(1s).count() << " кадра в 24fps\n"; }
Вывод:
1 секунда это: 1000 миллисекунд 1000000 микросекунд 1000000000 наносекунд 0 минут 0.82672 microfortnights 0.316887 нановека 24 кадра в 24fps