定义于头文件 <chrono>
template< class Rep, class Period = std::ratio<1> > class duration;
类模板std::chrono::duration
表示时间间隔。
它由Rep
类型的计次数和计次周期组成,其中计次周期是一个编译期有理数常量,表示从一个计次到下一个的秒数。
存储于duration
的数据仅有Rep
类型的计次数。若Rep
是浮点数,则duration
能表示小数的计次数。Period
被包含为时长类型的一部分,且只在不同时长间转换时使用。
构造函数
std::chrono::duration<Rep,Period>::duration
从数个可选数据源之一构造新的duration
。
1) 默认构造函数设为默认。
2) 复制构造函数设为默认(进行计次数的逐位复制)。
3) 构造拥有计次r
的时长。注意此构造函数仅若Rep2
(参数类型)能隐式转换为rep
(时长的计次类型)且满足下列条件才参与重载决议
std::chrono::treat_as_floating_point<rep>::value 为 true ,或std::chrono::treat_as_floating_point<Rep2>::value 为 false 。
(即,拥有整数计次的时长不能从浮点值构造,但拥有浮点计次的时长能从整数值构造)
4) 通过转换d
到确切的周期和计次构造时长,如同用 std::chrono::duration_cast<duration>(d).count() 。为避免转换时截断,此构造函数参与重载决议,仅若转换因数的计算(用 std::ratio_divide<Period2, Period> )不溢出且:
std::chrono::treat_as_floating_point<rep>::value == true
或:
std::ratio_divide<Period2, period>::den == 1 ,且std::chrono::treat_as_floating_point<Rep2>::value == false 。
(即要么时长使用浮点计次,要么Period2
能为周期整除)
参数
调用示例
#include <chrono>int main(){std::chrono::hours h(1); // 一小时std::chrono::milliseconds ms{3}; // 3 毫秒std::chrono::duration<int, std::kilo> ks(3); // 3000 秒// 错误: treat_as_floating_point<int>::value == false,// 此时长只允许整数计次// std::chrono::duration<int, std::kilo> d3(3.5);// 使用小数计次的 30Hz 钟std::chrono::duration<double, std::ratio<1, 30>> hz30(3.5);// 从 3 毫秒构造 3000 微秒std::chrono::microseconds us = ms;// error: 1/1000000 is not divisible by 1/1000// std::chrono::milliseconds ms2 = usstd::chrono::duration<double, std::milli> ms2 = us; // 3.0 微秒}
赋值内容
std::chrono::duration<Rep,Period>::operator=
赋值一个duration
的内容到另一个。
参数
返回计次的计数
std::chrono::duration<Rep,Period>::count
返回此 duration 的计次数。
参数
(无)
返回值
此 duration 的计次数。
调用示例
#include <chrono>#include <iostream>int main(){std::chrono::milliseconds ms{3}; // 3 毫秒// 从 3 毫秒构造 6000 微秒std::chrono::microseconds us = 2 * ms;// 使用分数计次的 30Hz 时钟std::chrono::duration<double, std::ratio<1, 30>> hz30(3.5);std::cout << "3 ms duration has " << ms.count() << " ticks\n"<< "6000 us duration has " << us.count() << " ticks\n"<< "3.5 30Hz duration has " << hz30.count() << " ticks\n";}
输出
返回特殊时长值零
std::chrono::duration<Rep,Period>::zero
返回零长度时长。
若时长的表示rep
要求其他某个实现返回零长时长,则能特化 std::chrono::duration_values 以返回所欲值。
参数
(无)
返回值
返回 duration(std::chrono::duration_values<rep>::zero())
返回特殊时长值最小值
std::chrono::duration<Rep,Period>::min
返回拥有最低可能值的时长。
若时长的表示rep
要求某个其他实现返回最小长度的时长,则可特化 std::chrono::duration_values 以返回所欲值。
参数
(无)
返回值
返回 duration(std::chrono::duration_values<rep>::min()) 。
返回特殊时长值最大值
std::chrono::duration<Rep,Period>::max
返回拥有最大可能值的时长。
若时长表示rep
要求某个其他实现返回最大长度的时长,则可特化 std::chrono::duration_values 以返回所欲值。
参数
(无)
返回值
返回 duration(std::chrono::duration_values<rep>::max()) 。
如果觉得《c++11 日期和时间工具(std::chrono::duration)(一)》对你有帮助,请点赞、收藏,并留下你的观点哦!