c++ - C/C++ 中的等式

标签 c++ c equality

在 C++ 中,确定某个值 x 是否在两个限制之间的常用方法是:

  //This is (A)
double x = 0.0d;
double lower = -1.0d;
double upper = +1.0d;

if(x > lower && x < upper){
  // Do some stuff
}

但是今天我无意中发现我可以这样做:

  // This is (B)
double x = 0.0d;
double lower = -1.0d;
double upper = +1.0d;

if(lower < x < upper){
  // Do some stuff
}

它似乎工作正常,但我以前从未听说过这样做,“lower < x < upper”。这会产生您期望的可执行代码吗? IE,(A)是否等同于(B)?

我想很多人都不知道这一点,我怀疑这可能是因为编译器对 (A) 和 (B) 的解释不同。这样对吗?

最佳答案

不,A 和 B 是等价的,你不能这样做。

或者,显然您可以(正如您发现的那样),但您并没有按照您认为的方式去做。

您正在评估 (lower < x) < upper ,即 lower < x 的值(这是 falsetrue ,但转换为 int 进行比较)与 upper 进行比较.

参见 this table of operator precedence获取更多信息。

关于c++ - C/C++ 中的等式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13918930/

相关文章:

C++继承类型

c++ - 为什么 ranges::single_view 对基础值使用大括号初始化?

c - 如何在for循环中输入if语句?

c++ - 使用 BSD 套接字的 HTTP 服务器不关闭连接或与 Windows 浏览器通信

javascript 真实数字

javascript - 为什么 ";"== ";"的计算结果为 "false"?

c# - 当 this == null 和 obj == null 时调用 IEquatable<T>.Equals(T obj) 的结果?

c++ - 你如何在静态函数c++中使用成员函数

c++ - 无法使用 OpenGL 2.1 和 GLSL 1.2 在屏幕上绘制内容

c++ - 对 GLShaderManager 和 GLBatch 的 undefined reference