我有一个关于以下表达式的快速问题:
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_variable
is an int
then 在此示例中没有有效的用户定义运算符。
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
这只是一个例子——最好避免在现实生活中编写这样的代码!