(var> x)和(x <var)之间有什么区别?

时间:2018-09-24 08:20:43

标签: c++ coding-style

我已经看到嵌入式编程以相反的顺序使用条件,例如左侧的文字而不是条件检查中的右侧。

( var > 0) and ( 0 < var) 

这是有原因的吗?还是只是一种编码样式?

谢谢

编辑:感谢大家回答并消除我的疑问。

2 个答案:

答案 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) // ...