close
Пространства имён
Варианты
Действия

std::chrono::duration

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
 
<tbody> </tbody>
Определено в заголовочном файле <chrono>
template< class Rep, class Period = std::ratio<1> > class duration;
(начиная с 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
(шаблон функции) [править]
преобразует duration в другой duration с другим интервалом тиков
(шаблон функции) [править]
преобразует duration в другой, округляя в меньшую сторону
(шаблон функции) [править]
преобразует duration в другой, округляя в большую сторону
(шаблон функции) [править]
преобразует duration в другой, округляя до ближайшего, или до чётного в промежуточных случаях
(шаблон функции) [править]
получает абсолютное значение duration
(шаблон функции) [править]
выполняет потоковый вывод в duration
(шаблон функции) [править]
разбирает 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 days, weeks, months и years охватывает диапазон не менее ±40000 лет. years равно 365.2425 days (средняя продолжительность григорианского года). months равен 30.436875 days (ровно 1/12 от years).

(начиная с C++20)

Вспомогательные классы

специализация свойства std::common_type
(специализация шаблона класса) [править]
указывает, что duration конвертируется в duration с другим периодом тика
(шаблон класса) [править]
строит нулевое, минимальное и максимальное значения счётчика тиков заданного типа
(шаблон класса) [править]
поддержка форматирования для duration
(специализация шаблона класса) [править]
поддержка хэширования для std::chrono::duration
(специализация шаблона класса)

Литералы

Определены в пространстве имён std::literals::chrono_literals
Литерал std::chrono::duration, представляющий часы
(функция) [править]
Литерал std::chrono::duration, представляющий минуты
(функция) [править]
Литерал std::chrono::duration, представляющий секунды
(функция) [править]
Литерал std::chrono::duration, представляющий миллисекунды
(функция) [править]
Литерал std::chrono::duration, представляющий микросекунды
(функция) [править]
Литерал std::chrono::duration, представляющий наносекунды
(функция) [править]

Примечание: буквенные суффиксы d и y относятся не к days и years, а к day и year соответственно.

(начиная с 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