我试图通过在一次评估中使用多个greater-than (>)
和less-than (<)
来查看变量是否在一个范围内。我不确定这是否有效。它似乎比using multiple =='s is illigal,但是它可以与&lt;和&gt;'s?
以下是我正在尝试做的一个例子:
if (bottomOfRange < variable < topOfRange) {
//Do stuff
}
我知道这个:
if (bottomOfRange < varialbe && variable < topOfRange) {
//Do stuff
}
有效,我只是在寻找一种更有效的比较方法。
这会评估我的意愿,还是会采取不同的行动?
答案 0 :(得分:6)
没有。这段代码可能会根据变量的类型进行编译,但不会给出你想要的比较。它会:
bottomOfRange < variable
以给出布尔结果; topOfRange
进行比较。如果要将值与其他两个值进行比较,则需要写出两个比较:
if (bottomOfRange < variable && variable < topOfRange)
答案 1 :(得分:1)
假设bottomOfRange
和topOfRange
是内置类型,那么不,它不会完成任何有用的事情。
如果您想要足够严重,可以定义一个重载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
警告:这主要是(纯粹?)作为古玩。虽然它显然支持你所要求的内容,但我对在我自己的代码中使用它非常犹豫,而且我并不是真的建议你在你的代码中使用它。