为什么合并的上限和下限比较总是评估为真?
Why does a combined upper and lower bound comparison always evaluate to true?
为什么第一个总是评估为真?我希望这两个语句的行为相同。
for (int i =0;i<4;++i) (0 < i < 3) ? cout << "True " : cout << "False ";
True True True True
for (int i =0;i<4;++i) (0 < i && i < 3) ? cout << "True " : cout << "False ";
False True True False
条件0 < i < 3
确实是(0 < i) < 3
。
而且 0 < i
是否为真并不重要,因为结果(0
为假,1
为真)将 始终小于3
.
如果你想确保i
在一个范围内,你需要多次单独的比较:0 < i && i < 3
,就像你在第二个循环中所做的那样.
因为 C++ 中不存在组合比较运算符。表达式被计算为
(0 < i) < 3
但 x < 1
的计算结果为 true
/false
,与 int
相比,它的计算结果为 1
/0
所以在结束 0 < 3
永远是真的 1 < 3
也是。
为什么第一个总是评估为真?我希望这两个语句的行为相同。
for (int i =0;i<4;++i) (0 < i < 3) ? cout << "True " : cout << "False ";
True True True True
for (int i =0;i<4;++i) (0 < i && i < 3) ? cout << "True " : cout << "False ";
False True True False
条件0 < i < 3
确实是(0 < i) < 3
。
而且 0 < i
是否为真并不重要,因为结果(0
为假,1
为真)将 始终小于3
.
如果你想确保i
在一个范围内,你需要多次单独的比较:0 < i && i < 3
,就像你在第二个循环中所做的那样.
因为 C++ 中不存在组合比较运算符。表达式被计算为
(0 < i) < 3
但 x < 1
的计算结果为 true
/false
,与 int
相比,它的计算结果为 1
/0
所以在结束 0 < 3
永远是真的 1 < 3
也是。