【问题标题】:Why does a combined upper and lower bound comparison always evaluate to true? [duplicate]为什么组合的上限和下限比较总是评估为真? [复制]
【发布时间】:2018-09-25 12:50:29
【问题描述】:

为什么第一个总是评估为真?我希望这两个语句的行为相同。

   for (int i =0;i<4;++i) (0 < i < 3) ? cout << "True " : cout << "False ";

真真真真假

    for (int i =0;i<4;++i) (0 < i && i < 3) ? cout << "True " : cout << "False ";

假真真假

【问题讨论】:

  • (0 &lt; i &lt; 3) -- 你很快就会发现 C++ 不是代数。
  • 不要将数学符号与 c++ 语法混淆,它们有相似之处(例如,0 &lt; i 之类的表达式是真或假),但差异大于它们。也许最突出的例子是x = 3*y;,它不是一个等式,而是一个赋值。

标签: c++ syntax evaluation comparison-operators


【解决方案1】:

条件0 &lt; i &lt; 3 真的是(0 &lt; i) &lt; 3

0 &lt; i 是否为真并不重要,因为结果(0 为假,1 为真)将始终小于3

如果您想确保i 在一个范围内,您需要多次单独 比较:0 &lt; i &amp;&amp; i &lt; 3,就像您在第二个循环中所做的那样。

【讨论】:

    【解决方案2】:

    因为 C++ 中不存在组合比较运算符。表达式被评估为

    (0 < i) < 3
    

    x &lt; 1 的计算结果为true/false,与int 相比,0 的计算结果为int,所以最后0 &lt; 3 始终为真,1 &lt; 3 也是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 2012-12-06
      • 2020-09-04
      • 1970-01-01
      • 2012-08-22
      • 2018-07-01
      • 1970-01-01
      相关资源
      最近更新 更多