我想检查一个值是否等于1.以下代码行是否有任何区别
评估值== 1
1 ==评估价值
在编译器执行方面
在大多数语言中,它都是一样的.
人们经常做1 ==评估值,因为1不是左值.这意味着你不能意外地完成任务.
例:
if(x = 6)//bug, but no compiling error { }
相反,您可以强制编译错误而不是错误:
if(6 = x)//compiling error { }
现在,如果x不是int类型,并且你正在使用类似C++的东西,那么用户可能已经创建了一个operator ==(int)override,它将这个问题带到了新的含义.在这种情况下6 == x不会编译,但x == 6会.
这取决于编程语言.
在Ruby,Smalltalk,Self,Newspeak,Ioke和许多其他单一调度的面向对象编程语言中,a == b
实际上是一个消息发送.例如,在Ruby中,它等同于a.==(b)
.这意味着,当你编写时a == b
,然后执行==
类中的方法a
,但是当你编写时b == a
,则b
执行类中的方法.所以,这显然不是一回事:
class A; def ==(other) false end; end class B; def ==(other) true end; end a, b = A.new, B.new p a == b # => false p b == a # => true
不,但如果您不小心输入,后一种语法会给您一个编译器错误
if (1 = evaluatedValue)
请注意,今天任何体面的编译器都会在你写的时候发出警告
if (evaluatedValue = 1)
所以它主要与历史原因有关.
取决于语言.