1

我有一个关于以下表达式的快速问题:

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

" (0 != a_variable)" 和 " " 和有什么不一样(a_variable != 0)?我现在没有任何错误,但这是错误的使用方式吗?

4

3 回答 3

2

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

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

于 2010-07-27T19:20:36.987 回答
-1

0 != x和之间没有区别x != 0

于 2010-07-27T19:20:56.783 回答
-1

它可能产生的任何差异都是评估参数的顺序。a != b通常会评估a,然后评估b和比较它们,而b != a反过来会这样做。但是,我在某处听说在某些情况下评估顺序是未定义的。

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

考虑

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

假设操作数是从左到右计算的,那么调用(f() != g())会 yield false,因为f()会计算到-1g()to -1- while(g() != f())会 yield true,因为g()会计算到和1-to 。f()-1

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

于 2010-07-27T19:28:04.930 回答