我有一个关于以下表达式的快速问题:
int a_variable = 0;
if(0!=a_variable)
a_variable=1;
" (0 != a_variable)" 和 " " 和有什么不一样(a_variable != 0)?我现在没有任何错误,但这是错误的使用方式吗?
我有一个关于以下表达式的快速问题:
int a_variable = 0;
if(0!=a_variable)
a_variable=1;
" (0 != a_variable)" 和 " " 和有什么不一样(a_variable != 0)?我现在没有任何错误,但这是错误的使用方式吗?
如果你忘记了!,第一个会出错(0 = a_variable),第二个会造成严重破坏(a_variable = 0)。
此外,使用用户定义的运算符,第二种形式可以用成员函数实现,而第一种形式只能是非成员(可能是朋友)函数。尽管这是一个非常糟糕的主意,但有可能以不同的方式定义这两种形式。当然,因为a_variableis an intthen 在此示例中没有有效的用户定义运算符。
0 != x和之间没有区别x != 0。
它可能产生的任何差异都是评估参数的顺序。a != b通常会评估a,然后评估b和比较它们,而b != a反过来会这样做。但是,我在某处听说在某些情况下评估顺序是未定义的。
它与变量或数字没有太大区别(除非变量是具有重载!=运算符的类),但在比较某些函数调用的结果时可能会有所不同。
考虑
int x = 1;
int f() {
x = -1;
return x;
}
int g() {
return x;
}
假设操作数是从左到右计算的,那么调用(f() != g())会 yield false,因为f()会计算到-1和g()to -1- while(g() != f())会 yield true,因为g()会计算到和1-to 。f()-1
这只是一个例子——最好避免在现实生活中编写这样的代码!