类模板std::ratio代表一个比例,或者说是比率。类模板 std::ratio
及相关的模板提供编译时有理数算术支持。此模板的每个实例化都准确表示任一确定有理数,只要分子 Num
与分母 Denom
能表示为 std::intmax_t 类型的编译时常量。另外, Denom
不可为零且不可等于最负的值。约分分子和分母到最简。std::ratio的定义如下:
1 | template<intmax_t _Num, intmax_t _Den = 1> |
其中分母为_Dx,其不能为0 也不能小于最小的负值。std::ratio
是不同的类型,即使它们表示同一有理数(在约分后)。能经由其 type
成员约分 ratio
类型到最简分数: std::ratio<3, 6>::type
为 std::ratio<1, 2>
。示例代码如下:
1 |
|
STL还定义了一些类型如下:
1 | typedef ratio<1, 1000000000000000000> atto; |
还有一些编译期之间的运算:
算术 | |
---|---|
ratio_add(C++11) | 在编译时相加两个 ratio 对象 (别名模板) |
ratio_subtract(C++11) | 在编译时相减两个 ratio 对象 (别名模板) |
ratio_multiply(C++11) | 在编译时相乘两个 ratio 对象 (别名模板) |
ratio_divide(C++11) | 在编译时相除两个 ratio 对象 (别名模板) |
比较 | |
ratio_equal(C++11) | 在编译时比较两个 ratio 对象的相等性 (类模板) |
ratio_not_equal(C++11) | 在编译时比较两个 ratio 对象的不相等性 (类模板) |
ratio_less(C++11) | 在编译时比较两个 ratio 对象的小于关系 (类模板) |
ratio_less_equal(C++11) | 在编译时比较两个 ratio 对象的小于或等于关系 (类模板) |
ratio_greater(C++11) | 在编译时比较两个 ratio 对象的大于关系 (类模板) |
ratio_greater_equa(C++11) | 在编译时比较两个 ratio 对象的大于或等于关系 (类模板) |
示例程序如下:
1 |
|