代码之家  ›  专栏  ›  技术社区  ›  Chenna V

不等式的算子交换性!=在C++中

  •  1
  • Chenna V  · 技术社区  · 16 年前

    我有一个关于以下表达式的简短问题:

    int a_variable = 0;
    if(0!=a_variable)
       a_variable=1;
    

    这两者有什么区别? (0 != a_variable) “和” (a_variable != 0) “? 我现在没有任何错误,但这是一个错误的使用方法吗??

    3 回复  |  直到 16 年前
        1
  •  2
  •   Ben Voigt    16 年前

    如果你忘记了 ! ,第一个将给出错误 (0 = a_variable) 第二个会造成严重破坏 (a_variable = 0) .

    此外,使用用户定义的运算符,第二个窗体可以用成员函数实现,而第一个窗体只能是非成员(可能是友元)函数。虽然这是一个非常糟糕的想法,但有可能用不同的方式来定义这两种形式。当然,因为 a_variable 是一个 int 在这个例子中没有有效的用户定义的操作符。

        2
  •  -1
  •   Donald Miner    16 年前

    两者没有区别 0 != x 和 x != 0 .

        3
  •  -1
  •   kFYatek    16 年前

    它可能产生的任何差异都是参数的计算顺序。 a != b 通常会评估 a 然后评估 b 比较一下,而 b != a 会反过来做。然而,我在某个地方听说,在某些情况下,评估的顺序是不确定的。

    它与变量或数字没有很大的区别(除非变量是一个重载的类 != 运算符),但在比较某些函数调用的结果时可能会有所不同。

    考虑

    int x = 1;
    int f() {
      x = -1;
      return x;
    }
    int g() {
      return x;
    }
    

    假设操作数从左到右进行计算,然后调用 (f() != g()) 会屈服 false ,因为 f() 将评估 -1 和 g() 到 - 1 -而 (g() != f()) 会屈服 true ,因为 g-() 将评估为 1 和 F-() - - 1 .

    这只是一个例子——最好不要在现实生活中编写这样的代码!