不平等的运算符交换!=在C ++中

时间:2010-07-27 19:18:54

标签: c++ operator-keyword

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

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

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

3 个答案:

答案 0 :(得分:2)

如果您忘记!,第一个会发出错误(0 = a_variable),第二个会造成严重破坏(a_variable = 0)

此外,对于用户定义的运算符,第二种形式可以使用成员函数实现,而第一种形式只能是非成员(可能是朋友)函数。尽管这是一个非常糟糕的想法,但以不同的方式定义这两种形式是可能的。当然,由于a_variableint,因此在此示例中没有有效的用户定义运算符。

答案 1 :(得分:-1)

0 != xx != 0之间没有区别。

答案 2 :(得分:-1)

它可能产生的任何差异都是评估参数的顺序。 a != b通常会评估a,然后评估b并对其进行比较,而b != a会反过来评估!=。但是,我听说在某些情况下评估顺序是不确定的。

它与变量或数字没有太大区别(除非变量是一个带有重载int x = 1; int f() { x = -1; return x; } int g() { return x; } 运算符的类),但是当你比较某些函数调用的结果时它可能会有所不同。 / p>

考虑

(f() != g())

假设操作数从左到右进行评估,那么调用false将产生f(),因为-1将评估为g()-1将评估为{ {1}} - (g() != f())会产生true,因为g()将评估为1f() - 评估为-1

这只是一个例子 - 更好地避免在现实生活中编写这样的代码!