zoukankan      html  css  js  c++  java
  • 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 我的开源项目 欢迎大家一起交流编程架构技术&大数据技术! +++++++++++++++++++++++++++++++++++++++++++
  • 相关阅读:
    JS 实现的年月日三级联动
    【代码总结● Swing中的一些操作与设置】
    S7通信协议之你不知道的事儿
    .NetCore程序在Linux上面部署的实现
    什么是哈希表?
    什么是队列?
    什么是栈?
    什么是数组?
    什么是数据结构?
    什么是链表?
  • 原文地址:https://www.cnblogs.com/bluejoe/p/5116094.html
Copyright © 2011-2022 走看看