std::chrono::duration_cast

来自cppreference.com
< cpp‎ | chrono‎ | duration
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(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)
 
 
 
在标头 <chrono> 定义
template <class ToDuration, class Rep, class Period>
constexpr ToDuration duration_cast(const std::chrono::duration<Rep,Period>& d);
(C++11 起)

转换 std::chrono::duration 为不同类型 ToDuration 的时长。 函数不参与重载决议,除非 ToDurationstd::chrono::duration 的特化。

不使用隐式转换。可能的情况下避免乘法和除法,若在编译时已知一或多个参数为 1 。以最宽的可用类型进行计算,而如同用 static_cast 到结果类型的转换,只在完成时进行。

参数

d - 要转换的 duration

返回值

转换为 ToDuration 类型时长的 d

注解

在源周期能准确地为目标周期所整除的场合(例如小时到分钟),浮点时长和整数时长间转型能经由 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()
{
    auto t1 = std::chrono::high_resolution_clock::now();
    f();
    auto t2 = std::chrono::high_resolution_clock::now();
 
    // 整数时长:要求 duration_cast
    auto int_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1);
 
    // 小数时长:不要求 duration_cast
    std::chrono::duration<double, std::milli> fp_ms = t2 - t1;
 
    std::cout << "f() took " << fp_ms.count() << " ms, "
              << "or " << int_ms.count() << " whole milliseconds\n";
}

可能的输出:

f() took 1000.23 ms, or 1000 whole milliseconds

参阅

(C++11)
时间区间
(类模板)
转换时间点为同一时钟上拥有不同时长的另一时间点
(函数模板)
以向下取整的方式,将一个时长转换为另一个时长
(函数模板)
以向上取整的方式,将一个时长转换为另一个时长
(函数模板)
转换时长到另一个时长,就近取整,偶数优先
(函数模板)