std::chrono::duration_cast
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
。
注意
函数不参与重载决议,除非 ToDuration
是 std::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
参阅
(C++11) |
时间区间 (类模板) |
转换时间点为同一时钟上拥有不同时长的另一时间点 (函数模板) | |
(C++17) |
以向下取整的方式,将一个时长转换为另一个时长 (函数模板) |
(C++17) |
以向上取整的方式,将一个时长转换为另一个时长 (函数模板) |
(C++17) |
转换时长到另一个时长,就近取整,偶数优先 (函数模板) |