C++11 chrono入门

本文介绍了C++11 chrono库,用于处理时间间隔、比例、时间点和时钟的概念。chrono库中的duration表示时间间隔,如秒、毫秒等,提供了隐式和显式转换。ratio定义了时间单位间的转换比例。time_point表示具体时间点,与特定时钟关联,支持与duration的转换。最后,介绍了系统提供的system_clock和steady_clock,前者可能不单调,后者适合测量间隔。
摘要由CSDN通过智能技术生成

​    C++11引入chrono类来表示时间中的一些概念,以及进行时间相关的计算,这是因为传统使用算术的方式来表示时间间隔和时间点本身这是很模凌两可的。通过使用chrono类库,使用不同的类型来表示不同的时间概念,这有助于通过编译器在编译时来帮助程序员发现一些逻辑错误,为此chrono抽象了如下几个概念:

duration

​    一个时间的duration表示的就是一个时间间隔,比如:3秒、3分钟、3小时等。在chrono类库中就分别有对应的时间单位来表示durationstd::chrono::seconds表示的是秒,是时间的间隔单位,其实现如下:

class seconds {
   int64_t sec_;
  public:
   seconds() = default;
   //....
};

​    就是一个类中包含了一个int64_t的成员来保存秒数,很简单,其次为了区分秒数和普通的数值之间的差异,seconds类在设计的时候就禁止数值隐式转换为seconds类,所以下面这样的操作编译不会通过:

seconds s = 3;  // 编译出错
seconds s1{
  3};  // 这样是可以的
s1 = 4; // 编译出错

std::cout << s << "\n"; // 很不幸目前还不可以
std::cout << s.count() << "s\n"; // 这样是可以的

seconds s2 = 3s;    // C++14支持
seconds s3 = s2 + s1;   // 支持基本的算术操作,但是不支持seconds和一个普通数值进行算术操作

seconds::min(); // 获取秒类型可以表示的范围,
seconds::max();

​    除了seconds外,chrono还提供了nanosecondsmicrosecondsmillisecondsminuteshours。用法基本上seconds一致。这些类型之间的转化规则chrono都已经帮我们做好了,例如: 1seconds == 1000milliseconds,而且这种转换是隐式的。例如下面这段代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值