【问题标题】:c++ check if value in range ( A < B < C verse A<b && B<C )c ++检查值是否在范围内( A < B < C verse A<b && B<C )
【发布时间】:2021-09-02 04:17:51
【问题描述】:

我想检查值 B 是否介于 A 和 C 之间, 我的第一次尝试是if(A &lt; B &lt; C),但是结果不对,在我尝试if(A &lt; B &amp;&amp; B &lt; C)之后效果很好

第二种方法对我来说很直观,但我不知道为什么第一种方法会失败以及C++在if(A &lt; B &lt; C)操作中实际上做了什么? 谁能给我解释一下,谢谢!

【问题讨论】:

  • 您不能链接关系运算符。真正发生的是A &lt; B 将评估为10 并将与C 进行比较。
  • 一个好的book应该优先于随机编码。
  • 在 Python 中(我猜你已经看到了),像 a &lt; b &lt; c 这样的“逻辑链”是 a &lt; b and b &lt; c 的简写。在这方面,很少有语言能像 Python 一样工作。 (注意,在 Python 中,你也可以写一些奇怪的东西,比如3 &gt; 2 &lt; 5 in [2,3,4]。)

标签: c++ compare


【解决方案1】:

在 C++ 中,&lt; 运算符具有 left-to-right associativity。这意味着您的表达式 A &lt; B &lt; C 可以写成(更详细地)(A &lt; B) &lt; C。首先,评估A &lt; B,例如res。然后,该中间结果用于评估res &lt; C,最终由if 语句使用。

而且,正如您所见,它与表达式 A &lt; B &amp;&amp; B &lt; C 有很大不同。

【讨论】:

    【解决方案2】:

    A &lt; B 的计算结果为布尔值,因此您将 C 与布尔值进行比较。

    true &lt; C 没有意义,不是吗?除非C 本身是一个布尔值,在这种情况下,你为什么使用小于/大于哈哈。

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 2011-06-13
      • 1970-01-01
      相关资源
      最近更新 更多