C++ 的时间库之二:Ratio

从现在开始,我们开始介绍 C++ 风格的时间处理,在这之前,首先要介绍std::ratio。因为 C++ 的 chrono库中的时间段(duration)定义离不开std::ratio,不了解std::ratio,就很难理解duration的定义。

1 std::ratio 的基本意义

std::ratio 是 C++ 11 引入的数值计算库的一部分,对应的头文件是 (如果使用时间库,只要包含头文件就可以了,这个头文件内部引用了 头文件)。有资料将其称之为分数,其实它只是提供了比例或比率的概念,并且std::ratio是个完完全全的泛型库,它的所有计算都是在编译期间完成的,其定义如下:

template<std::intmax_t Num,  std::intmax_t Denom = 1> 
class ratio;

std::intmax_t 表示系统支持的最大位宽的整数,一般 32 位系统中代表的是std::int32_t,在 64 位的系统上代表的是std::int64_tratio类还有两个静态成员,一个是ratio::num,表示约分后的分子,另一个是ratio::den,表示约分后的分母。看一下例子代码就明了了:

assert((std::ratio<24, 32>::num == 3));
assert((std::ratio<24, 32>::den == 4));
//或者:
std::cout << "std::ratio<24, 32>::num = " << std::ratio<24, 32>::num << std::endl;
std::cout << "std::ratio<24, 32>::den = " << std::ratio<24, 32>::den << std::endl;

由于std::ratio必须在编译期实例化的,所以std::ratio类的两个模板参数必须都是常量或常量表达式(constexpr):

int n = 10;
int m = 100;

std::ratio<n, m>::num; //ERROR,编译错误

const int n = 10;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王晓华-吹泡泡的小猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值