23.2.1 书写正常的表达式

23.2.1 书写正常的表达式

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

--------------------------------------------------------------------------

如果你想与我交流,请点击如下链接加我为好友:http://student.csdn.net/invite.php?u=113292&c=8913f87cffe7d533

+++++++++++++++++++++++++++++++++++++++++++
如本文存在任何侵权部分,请及时告知,我会第一时间删除!
转载本博客原创文章,请附上原文@cnblogs的网址!
QQ: 5854165 我的开源项目 欢迎大家一起交流编程架构技术&大数据技术! +++++++++++++++++++++++++++++++++++++++++++
原文地址:https://www.cnblogs.com/bluejoe/p/5116094.html