《高质量C++编程指南》第4章~表达式和基本语句--【优秀的编程思想】

举报
王博Kings 发表于 2020/12/29 23:01:12 2020/12/29
【摘要】 目录 4.1 运算符的优先级 4.2 复合表达式 4.3 if 语句  4.3.1 布尔变量与零值比较 4.3.2 整型变量与零值比较 4.3.3 浮点变量与零值比较 4.3.4 指针变量与零值比较  4.3.5 对if语句的补充说明   4.4 循环语句的效率 4.5 for 语句的循环控制变量 4.6 switch语句  看似简单,但隐藏隐患 ...

目录

4.1 运算符的优先级

4.2 复合表达式

4.3 if 语句 

4.3.1 布尔变量与零值比较

4.3.2 整型变量与零值比较

4.3.3 浮点变量与零值比较

4.3.4 指针变量与零值比较 

4.3.5 对if语句的补充说明 

 4.4 循环语句的效率

4.5 for 语句的循环控制变量

4.6 switch语句 


看似简单,但隐藏隐患

4.1 运算符的优先级

优先级 运算符 结合律

()  []  ->  . 从左至右
! ~ ++ -- sizeof  + - * & 从右至左
*  /  % 从左至右
+  - 从左至右
<<  >> 从左至右
<  <=  >  >= 从左至右
==  != 从左至右
& 从左至右
^ 从左至右
| 从左至右
&& 从左至右
|| 从右至左
?: 从右至左
= +=  -=  *=  /=  %=  &=  ^=  |=  <<=  >>= 从左至右

代码中运算符比较多的情况下,使用括号。

4.2 复合表达式

(1)不要编写很复杂的复合表达式

(2)不要有多用途的复合表达式,比如又是求值,又是要赋值

(3)不要把复合表达式和数学表达式混淆:a<b<c这类 

4.3 if 语句 

4.3.1 布尔变量与零值比较

 (1)不可以将布尔变量直接与TURE  FALSE 或者1、0比较

布尔类型的定义是,非零都为真,零值为假,非零的不一定是1, 还有可能是-1

布尔表达式名字是flag,它与零值比较的标准if语句如下:

if(flag)       //为真

if (! flag)    //为假

以下都是不好风格if(flag==TURE     flag==1     flag  ==FALSE  flag==0)

4.3.2 整型变量与零值比较

(2)用==或者!=直接与0比较

if (value==0)

if (value !=0)

不要模仿布尔变量风格写成if(value)   if(!value) 

4.3.3 浮点变量与零值比较

(3)不能使用==或者!=与任何数值比较

if( ( x>=-EPS ) && ( x<= EPS ))   // EPS是允许误差精度

4.3.4 指针变量与零值比较 

指针变量的零值是“NULL”,应当  使用==  !=与NULL 对比

尽管NULL的值与0相同,但意义不同

if ( p == NULL )     if( p != NULL )

不要写成  if( p == 0  )// 让人误解p是整型变量

 不要写成 if ( p )   //让人误解p是布尔变量

4.3.5 对if语句的补充说明 

有时候我们看到

if ( NULL == P )这样的写法,并不是错误,而是有意这么写,为了避免p==NULL写成p=NULL   ,因为NULL=p这样是错误的,可以被编译器检查出来


  
  1. //程序遇到if/else/return组合时
  2. if (condition)
  3. {
  4. return x;
  5. }
  6. else
  7. {
  8. return y;
  9. }
  10. 或者直接写成
  11. return ( condition ? x : y );

 4.4 循环语句的效率


  
  1. //多重循环,长循环在外面,效率低
  2. for (row=0 ; row<100; row++)
  3. {
  4. for (col=0; col<5; col++)
  5. {
  6. sum = sum + a[row][col];
  7. }
  8. }
  9. //多重循环,长循环在里面,效率高!
  10. for (col=0; col<5; col++)
  11. {
  12. for (row=0 ; row<100; row++)
  13. {
  14. sum = sum + a[row][col];
  15. }
  16. }

  
  1. //程序简介,但是效率比较低,N较大情况下不用
  2. for (i=0; i<N; i++)
  3. {
  4. if(condition)
  5. DoSomething();
  6. else
  7. Other();
  8. }
  9. //程序繁琐,但是效率高,N较大情况下使用
  10. if(condition)
  11. {
  12. for(i=0; i<N;i++)
  13. DoSomething();
  14. }
  15. else
  16. {
  17. for(i=0; i<N;i++)
  18. Other();
  19. }

4.5 for 语句的循环控制变量

(1)不可在for循环体内修改循环变量,防止for循环失去控制

(2)建议采用“半开半闭区间”写法

for ( int  x= 0; x<N; x++ )    比for (int x=0; x<N-1; x++)这个好,简介明了大方,虽然含义一样

4.6 switch语句 

(1)每条case语句结尾不要忘了加break,否则会出多个分支

(2)不要忘了default处理,即使没有用,也必须要保留 default : break 


  
  1. switch(variable)
  2. {
  3. case value1:...
  4. break;
  5. case value2:...
  6. break;
  7. ...
  8. default : ....
  9. break;
  10. }

 

文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。

原文链接:kings.blog.csdn.net/article/details/89525788

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。