为什么合并的上限和下限比较总是评估为真?

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 也是。