我对以下表达式有一个简短的问题:
int a_variable = 0;
if(0!=a_variable)
a_variable=1;
“(0 != a_variable)
”和“(a_variable != 0)
”之间有什么区别?
我现在没有任何错误,但这是一种错误的使用方法吗?
答案 0 :(得分:2)
如果您忘记!
,第一个会发出错误(0 = a_variable)
,第二个会造成严重破坏(a_variable = 0)
。
此外,对于用户定义的运算符,第二种形式可以使用成员函数实现,而第一种形式只能是非成员(可能是朋友)函数。尽管这是一个非常糟糕的想法,但以不同的方式定义这两种形式是可能的。当然,由于a_variable
是int
,因此在此示例中没有有效的用户定义运算符。
答案 1 :(得分:-1)
0 != x
和x != 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()
将评估为1
和f()
- 评估为-1
。
这只是一个例子 - 更好地避免在现实生活中编写这样的代码!