我已经看到嵌入式编程以相反的顺序使用条件,例如左侧的文字而不是条件检查中的右侧。
( var > 0) and ( 0 < var)
这是有原因的吗?还是只是一种编码样式?
谢谢
编辑:感谢大家回答并消除我的疑问。
答案 0 :(得分:3)
它们是等效的。唯一的不同可能是如果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
但这在今天并不是太重要,因为大多数编译器会if (a=0)
warn来代替您。
马克斯·兰霍夫(Max Langhof)指出,这种颠倒的条件称为Yoda conditions,因为其顺序与普通英语的顺序不同。
答案 1 :(得分:0)
这只是个人喜好。好吧,有人认为,在相等性比较中,字面量应始终位于左侧,以获取意外分配的编译器错误:
预期:
if(x == 42) // ...
错别字:
if(x = 42) // ... most likely a warning
编译器错误:
if(42 = x) // ...