( var > x) 和 ( x < var) 之间有什么区别?
Any differences between ( var > x) and ( x < var)?
我见过嵌入式编程以相反的顺序使用条件,例如在条件检查中左侧而不是右侧的文字。
( var > 0) and ( 0 < var)
这有什么原因吗?或者它只是一种编码风格?
谢谢
编辑:感谢大家回答并消除我的疑问。
它们是等价的。唯一的区别可能是 operator<
/>
是否重载,并且这些重载具有不同的含义(尽管不鼓励)。
我见过有人为相等运算符这样做,以避免错误地使用赋值。所以不是这个:
if (a==0) ...
误写为:
if (a=0) ... // compiles, and not what we wanted, a assigned to zero, and "if" never taken
如果我们改用反向比较:
if (0==a) ...
然后错误版本编译不通过:
if (0=a) ... // doesn't compile
但这在今天并不太重要,因为大多数编译器会 warn 你 if (a=0)
。
正如 Max Langhof 所指出的,这种颠倒的情况被称为 Yoda conditions,因为顺序与正常的英语顺序不同。
这只是个人品味。好吧,有些人争辩说,在比较相等性时,文字应该总是在左侧,以便为意外分配获得编译器错误:
预期:
if(x == 42) // ...
打字错误:
if(x = 42) // ... most likely a warning
编译器错误:
if(42 = x) // ...
我见过嵌入式编程以相反的顺序使用条件,例如在条件检查中左侧而不是右侧的文字。
( var > 0) and ( 0 < var)
这有什么原因吗?或者它只是一种编码风格?
谢谢
编辑:感谢大家回答并消除我的疑问。
它们是等价的。唯一的区别可能是 operator<
/>
是否重载,并且这些重载具有不同的含义(尽管不鼓励)。
我见过有人为相等运算符这样做,以避免错误地使用赋值。所以不是这个:
if (a==0) ...
误写为:
if (a=0) ... // compiles, and not what we wanted, a assigned to zero, and "if" never taken
如果我们改用反向比较:
if (0==a) ...
然后错误版本编译不通过:
if (0=a) ... // doesn't compile
但这在今天并不太重要,因为大多数编译器会 warn 你 if (a=0)
。
正如 Max Langhof 所指出的,这种颠倒的情况被称为 Yoda conditions,因为顺序与正常的英语顺序不同。
这只是个人品味。好吧,有些人争辩说,在比较相等性时,文字应该总是在左侧,以便为意外分配获得编译器错误:
预期:
if(x == 42) // ...
打字错误:
if(x = 42) // ... most likely a warning
编译器错误:
if(42 = x) // ...