这是好久以前我遇到的问题,那时,我写代码进行比较的时候,总是习惯于把变量写在前面,把常量写在后面。 一天同事对我说,不要(不能)怎么写,应该把常量写在前面。而我当时只是把这个“规则”记录下来了,并没有寻根究底,直到现在整理我的工作表的时候,才发现这个问题我还没有搞明白。 于是在网上搜了搜。

这个规则真的违背了我们的思维习惯,我们在作比较的时候,总会有一个主体,而这个主体就是程序中的“变量”,我们总希望这个变量“满足”或“不满足”某些条件,于是,我们拿它去和条件比较。再说说我们的表达习惯,如果A满足**条件时,发生B事情,转换成程序表达,则是

if(A等于**条件)
    发生B事情

而这个规则明显和我们的思维习惯不符合。

为什么要有这个规则? 该规则的出发点是:在程序员少写一个等号时,防止编译器仍能够正常编译通过。 解决这种状况,要么永远不会少写等号,要么编译器能够发现if(变量=常量)的错误。当然,前者是不能保证的。所幸的是有部分(?)编译器能够识别这种错误。

还有一个优势(不知是否正确):(下段引自CSDN中的讨论,尾部附有链接)

if( 0 == len) 比 if( len == 0) 的速度(忘了是编译速度还是执行速度)要快,因为0为常量,因此编译器已经预知其对象类型。 好象是《effective c++》里面说过的

我查看《effective c++》(第三版),并没有找到这个说法。

附上参考的文章的链接:

CSDN讨论区的

郑晓的个人博客



blog comments powered by Disqus

Published

22 April 2013

Tags