在评估中使用多个'greater-than / less-than'比较器是否合适?
Is it proper to use multiple 'greater-than / less-than' comparators in an evaluation?
我试图通过在一次评估中使用多个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)
假设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 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
警告:这主要是(纯粹?)作为古玩。虽然它显然完全支持您的要求,但我对在自己的代码中使用它会很犹豫,我也不建议您在自己的程序中使用它。
相关文章:
- std::设置自定义比较器
- C++中"std::sort"比较器的不同类型
- 将 std::set 与基于键的比较器一起使用
- 带自定义比较器的最小优先级队列
- 函数类作为比较器
- 优先级队列自定义比较器
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 没有默认构造函数作为模板参数的自定义比较器
- set_intersection使用自定义设置比较器
- 如何为集合 c++ 建立比较器
- C++复杂情况的比较器通过参数问题
- 对于BTreeMap和其他依赖于Ord的东西,是否有等效于C++比较器对象?
- 对没有比较器或λ函数的向量进行排序?
- "operator()"在重载运算符方法中是什么意思,在priority_queue(STL)中用作C++中的比较器?
- 如何实现随机访问迭代器的"less than operator"?
- 如何在 C++ 类中重载 'less than' 运算符以比较常量?
- "less than" 与GCC 4与6的ifstream比较
- 为什么C++ STL 容器使用 "less than" 运算符<而不是 "equal equal" 运算符== 作为比较器?
- 如何将比较器 a-la std::less 传递给 C 样式 Qsort
- 在评估中使用多个'greater-than / less-than'比较器是否合适?