23.2.1 书写正常的表达式
看一看下面的表达式:
- int i = 100;
- i = i++;
这是完全合法的一例表达式,知道该死的i会有什么样的值? 这是常见的面试题中的一种,许多老师和招聘单位总会拿出这样的表达式来整人并藉以炫耀,常常让人想到孔乙己:“你知道茴字有几种写法?”
写出这样的表达式是不负责任的,不同的编译器很有可能会得出不同的结果。不缺德的程序员应该避免这样的写法。否则,会有想象不到的灾难来临。
使用表达式时最好遵循以下规则:
l 不要过分地依赖于各操作符的优先权,在必要的时候使用括号()。如:
bool bValue = (i > j) && (i < 0 || j < 0);
l 不要过分地依赖于表达式的赋值顺序,如尽量少用++i,++j等。
l 不要写出没有意义的语句:
int a = a;
l 如果可能的话,该使用语句块的时候就尽量用上“{}”,如:
- for(int i = 0; i < 10; i++)
- m *= i;
- for(int i = 0; i < 10; i++)
- m *= i; m++;
- for(int i = 0; i < 10; i++)
- {
- m *= i;
- }
l 如果一个语句太复杂,就拆成多个语句,没有人笑话你。如:
- ifstream in("test.out", ios::in | ios::binary);
- Point pt;
- for(; in; in.read((char *)&pt, sizeof(Point)), cout << pt.x << ", " << pt.y << endl);
这段代码完成对test.out文件的读取,它使用了一个for循环,并把循环体操作放在for语句内部,这种高级的写法完全可以替换成:
- for(; in; )
- {
- in.read((char *)&pt, sizeof(Point));
- cout << pt.x << ", " << pt.y << endl;
- }
如果你觉得这个for循环比较怪,也可以改造成while循环:
- while(in)
- {
- in.read((char *)&pt, sizeof(Point));
- cout << pt.x << ", " << pt.y << endl;
- }
这样一来,代码比最初的高级版本清楚多了。
牢记这些原则,否则自己酿造的苦果,还得自己去独享。不负责任的表达式永远不会让编译器弄晕,而作为程序员的你,只会越来越糊涂。
--------------------------------------------------------------------------
如果你想与我交流,请点击如下链接加我为好友:http://student.csdn.net/invite.php?u=113292&c=8913f87cffe7d533