C 中的两个比较运算符,例如Python
Two comparison operators in c++ like python
就像在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]
相关文章:
- 为什么比较运算符如此快速
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 关于 std::min, std::max 中的比较运算符的混淆
- 三向比较运算符成员与非成员实现
- 标准::可选枚举的比较运算符
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- C++分数混合比较运算符错误
- <<运算符优先级与字符串比较
- 不能将重载比较运算符与 Catch 测试一起使用
- 重构使用动态强制转换的 std::set 的比较运算符
- ">"运算符和"<"运算符如何进行字符串比较?
- "operator()"在重载运算符方法中是什么意思,在priority_queue(STL)中用作C++中的比较器?
- C++使用关系运算符比较字符串
- 为什么使用 and 运算符比较 if 语句中的 2 个对象会抛出错误,而使用 2 if 语句则不会
- 使用关系运算符比较指针意味着什么
- 运算符<比较多个字段
- 运算符==比较两个不同的类
- 使用==运算符比较字符串到0
- 使用'if'语句和"<<"时的结果错误,'>>'运算符比较 3 个整数