2

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

这是我正在尝试做的一个例子:

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

我知道这个:

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

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

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

4

2 回答 2

8

不会。此代码可能会编译,具体取决于变量的类型,但不会给出您想要的比较。它会:

  • 评估bottomOfRange < variable以给出布尔结果;
  • 将该结果提升为值为 0 或 1 的数值类型;
  • 将该值与topOfRange.

如果要将一个值与其他两个值进行比较,则需要写出这两个比较:

if (bottomOfRange < variable && variable < topOfRange)
于 2013-09-02T16:22:42.070 回答
1

假设bottomOfRangeandtopOfRange是内置类型,那么不,它不会完成任何有用的事情。

如果你想要足够糟糕,你可以定义一个重载的类型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 range\n";
    else
        std::cout << "out of range\n";

    bottomOfRange = 30;
    topOfRange = 10;

    if (bottomOfRange < variable < topOfRange)
        std::cout << "In range\n";
    else
        std::cout << "Out of range\n";
}
#endif

结果:

In range
Out of range

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

于 2013-09-02T16:43:05.207 回答