std::chrono::duration_cast

来自cppreference.com
< cpp‎ | chrono‎ | duration
 
 
工具库
类型支持(基本类型、 RTTI 、类型特性)
动态内存管理
错误处理
程序工具
变参数函数
日期和时间
函数对象
(C++11)
关系运算符
optionalanyvariant (C++17)
pair 与 tuple
(C++11)
(C++17)
swap 、 forward 与 move
(C++14)
(C++11)
(C++11)
初等字符串转换
(C++17)
(C++17)
类型运算
(C++11)
(C++17)
 
 
 
template <class ToDuration, class Rep, class Period>
constexpr ToDuration duration_cast(const duration<Rep,Period>& d);
(C++11 起)

转换 std::chrono::duration 为不同类型 ToDuration 的时长。

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

目录

[编辑] 参数

d - 要转换的 duration

[编辑] 返回值

转换为 ToDuration 类型时长的 d

[编辑] 注意

函数不参与重载决议,除非 ToDurationstd::chrono::duration 的实例。

在源周期能准确地为目标周期所整除的场合(例如小时到分钟),浮点时长和整数时长间转型能隐式进行,无需 duration_cast

从浮点时长转型到整数时长,在浮点值为 NaN 、无穷大或过大而无法以目标的整数类型表示时,导致未定义行为

[编辑] 示例

此示例度量函数的执行时间

#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

[编辑] 参阅

转换 time_point 为同一时钟上拥有不同 duration 的另一 time_point
(函数模板) [编辑]
以向下取整的方式,将一个时间间隔转换为另一个
(函数模板) [编辑]
以向上取整的方式,将一个时间间隔转换为另一个
(函数模板) [编辑]
转换 duration 到另一个,就近取整,倾向偶数
(函数模板) [编辑]