就像在python中一样,比较5 > x > 1
在C 中起作用。它没有显示任何编译错误,但似乎也行不通。
在C 中,5 > x > 1
分组为(5 > x) > 1
。
(5 > x)
是 false
或 true
,因此,这永远不会大于1,因为false
和true
分别转换为0
和1
。因此
5 > x > 1
对于x
的任何值,是C 中的false
。因此,在C 中,您需要用更长的表格
x > 1 && x < 5
我从不对>您无法满意选项...因此,理论上您可以 Overload Operators这样(只有一个草图,但我认为您会明白):
#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]