c ++中的两个比较运算符,如python

问题描述 投票:2回答:2

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

python c++ logic comparison-operators
2个回答
8
投票

在C ++中,5 > x > 1被归为(5 > x) > 1

因为(5 > x)false分别转换为truefalse,所以true要么是0要么是1,因此它永远不会大于1。于是

5 > x > 1

对于false的任何值,在C ++中都是x。所以在C ++中你需要用更长的形式编写你真正想要的表达式

x > 1 && x < 5

1
投票

我从不满足于你不能选择......所以理论上你可以像这样重载运算符(只是一个草图,但我想你会明白这一点):

#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]

© www.soinside.com 2019 - 2024. All rights reserved.