由于 C++ 标准库通常为其类提供重载运算符,我想知道为什么有比较函数(实际上不是真正的函数,而是具有重载 () 运算符的结构)但没有 std::ratio 类的比较运算符。

我认为它们会提供更好的使用和可读性,并且也可以在编译时执行。

即使他们的特定解决方案需要使用结构体进行模板元编程,将其包装到另一个类似的函数中应该没有问题:

template<intmax_t N1, intmax_t D1, intmax_t N2, intmax_t D2>
constexpr bool operator==(const ratio<N1, D1>& first, const ratio<N2, D2>& second) {
    return ratio_equal<ratio<N1,D1>, ratio<N2,D2>>();
}

实际上对我有用,也可以很容易地被所有其他运营商采用

那么我是不是遗漏了什么,或者有人知道为什么他们决定不支持这里的运营商?

最佳答案

ratio 类不是为了实例化而设计的;它没有数据成员,因此基于它的任何对象都不包含除类类型本身之外的任何信息。由于必须针对对象而不是类型调用运算符,因此提供它们毫无意义。这甚至会适得其反,因为这意味着实例化类会很有用。

如果您确实需要运行时对象而不是编译时类型,我建议 ratio 可能不是合适的选择。

关于c++ - 为什么 std::ratio 不支持比较运算符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36486591/

10-11 21:51