C 中的两个比较运算符,例如Python



就像在python中一样,比较5 > x > 1在C 中起作用。它没有显示任何编译错误,但似乎也行不通。

在C 中,5 > x > 1分组为(5 > x) > 1

(5 > x)falsetrue,因此,这永远不会大于1,因为falsetrue分别转换为01。因此

5 > x > 1

对于x的任何值,是C 中的false。因此,在C 中,您需要用更长的表格

编写您真正想要的表达式
x > 1 && x < 5

我从不对>您无法满意选项...因此,理论上您可以 Overload Operators这样(只有一个草图,但我认为您会明白):

#include <iostream>
template <class T>
struct TwoWayComparison {
    T value;
    bool cond = true;
    friend TwoWayComparison operator >(const T& lhs, const TwoWayComparison& rhs) {
        return {rhs.value, lhs > rhs.value};
    }
    friend TwoWayComparison operator >(const TwoWayComparison& lhs, const T& rhs) {
        return {rhs, lhs.cond && lhs.value > rhs};
    }
    operator bool() {
        return cond;
    }
};
int main() {
    TwoWayComparison<int> x{3};
    if (15 > x > 1) {
        std::cout << "abc" << std::endl;
    }
}

[live demo]

最新更新