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

std::chrono::duration_cast

Материал из 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 ToDuration, class Rep, class Period> constexpr ToDuration duration_cast(const std::chrono::duration<Rep,Period>& d);
(начиная с C++11)

Преобразует std::chrono::duration в duration другого типа ToDuration.

Функция не участвует в разрешении перегрузки, если только ToDuration не является специализацией std::chrono::duration.

Неявные преобразования не используются. По возможности избегают умножения и деления, если во время компиляции известно, что один или несколько параметров равны 1. Вычисления выполняются в самом широком доступном типе и преобразуются, как если бы static_cast, в тип результата только по завершении.

Параметры

d длительность для преобразования

Возвращаемое значение

d преобразуется в длительность типа ToDuration.

Примечание

Преобразование между целочисленными длительностями, когда исходный период точно делится на целевой период (например, часы и минуты), или между длительностями с плавающей запятой, может быть выполнено с помощью обычных преобразований или неявно через конструкторы std::chrono::duration, duration_cast не требуется.

Преобразование длительности с плавающей запятой в целочисленную подвержено неопределённому поведению, когда значение с плавающей запятой равно NaN, бесконечности или слишком велико для представления целочисленным типом цели. В противном случае приведение к целочисленной длительности подлежит усечению, как и любое static_cast к целочисленному типу.

Пример

В этом примере измеряется время выполнения функции

#include <iostream>
#include <chrono>
#include <ratio>
#include <thread>
 
void f()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
}
 
int main()
{
    const auto t1 = std::chrono::high_resolution_clock::now();
    f();
    const auto t2 = std::chrono::high_resolution_clock::now();

    // длительность с плавающей запятой: не требуется duration_cast
    const std::chrono::duration<double, std::milli> fp_ms = t2 - t1;

    // целочисленная длительность: требуется duration_cast
    auto int_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1);

    // преобразование целой длительности в целую длительность более короткой
    // кратной единицы времени: duration_cast не требуется
    std::chrono::duration<long, std::micro> int_usec = int_ms;
 
    std::cout << "f() выполнялась " << fp_ms << ", или "
              << int_ms << " (целые миллисекунды), или "
              << int_usec << " (целые микросекунды)\n";
}

Возможный вывод:

f() выполнялась 1000.14ms, или 1000ms (целые миллисекунды), or 1000000us (целые микросекунды)

Смотрите также

(C++11)
временной интервал
(шаблон класса) [править]
преобразует момент времени в другой момент времени на тех же часах с другой длительностью
(шаблон функции) [править]
преобразует duration в другой, округляя в меньшую сторону
(шаблон функции) [править]
преобразует duration в другой, округляя в большую сторону
(шаблон функции) [править]
преобразует duration в другой, округляя до ближайшего, или до чётного в промежуточных случаях
(шаблон функции) [править]