在评估中使用多个'greater-than / less-than'比较器是否合适?

Is it proper to use multiple 'greater-than / less-than' comparators in an evaluation?

本文关键字:比较器 less-than 是否 greater-than 评估      更新时间:2023-10-16

我试图通过在一次评估中使用多个greater-than (>)less-than (<)来查看变量是否在范围内。不过,我不确定这是否有效。似乎使用多个==是不合法的,但<和>的?

下面是我尝试做的一个例子:

if (bottomOfRange < variable < topOfRange) {
//Do stuff
}

我知道这个:

if (bottomOfRange < varialbe && variable < topOfRange) {
//Do stuff
}

有效,我只是在寻找一种更有效的比较方式。

这会评估我想要的方式吗,还是会有不同的行为?

否。根据变量的类型,这段代码可能会编译,但不会给出您想要的比较。它将:

  • 对CCD_ 3进行求值以给出布尔结果
  • 将该结果提升为值为0或1的数字类型
  • 将该值与CCD_ 4进行比较

如果你想将一个值与另外两个值进行比较,那么你需要写出两个比较:

if (bottomOfRange < variable && variable < topOfRange)

假设bottomOfRangetopOfRange是内置类型,那么不,它不会实现任何有用的功能。

如果你非常想,你可以定义一个重载operator<的类型,使其实际工作:

class range {
    int lower;
    int val;
    range(int lower, int val) : lower(lower), val(val) {}
public:
    bool operator < (int upper) {
        return lower < val && val < upper;
    }
    class start {
        int t;
    public:
        start(int t) : t(t) {}
        range operator < (int val) { return range(t, val); }
    };
};
#ifdef TEST
#include <iostream>
int main(){
    static char const *s [] = { "Out of range", "In range" };
    int variable = 20;
    range::start bottomOfRange(10);
    int topOfRange(30);
    if (bottomOfRange < variable < topOfRange)
        std::cout << "In rangen";
    else
        std::cout << "out of rangen";
    bottomOfRange = 30;
    topOfRange = 10;
    if (bottomOfRange < variable < topOfRange)
        std::cout << "In rangen";
    else
        std::cout << "Out of rangen";
}
#endif

结果:

In range
Out of range

警告:这主要是(纯粹?)作为古玩。虽然它显然完全支持您的要求,但我对在自己的代码中使用它会很犹豫,我也不建议您在自己的程序中使用它。