失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > c++11 日期和时间工具(std::chrono::duration)(一)

c++11 日期和时间工具(std::chrono::duration)(一)

时间:2019-02-01 01:30:45

相关推荐

c++11 日期和时间工具(std::chrono::duration)(一)

定义于头文件 <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)(一)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。