读高质量C++/C编程指南第4章

Posted TangguTae

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读高质量C++/C编程指南第4章相关的知识,希望对你有一定的参考价值。

目录

表达式和基本语句

 运算符的优先级

复合表达式

条件判断语句

for语句与switch语句

goto语句

总结:


表达式和基本语句

 运算符的优先级

C++/C里面的运算符的数量挺多的,没必要一个一个的记忆他们的优先级和结合律,熟练一些经常使用的运算符的优先级,如果不太确定优先级顺序,建议直接用括号括起来,确定表达式的操作顺序,避免使用默认的优先级。


复合表达式

写一些简单的复合表达式可以提高编译效率,并且书写整洁。例如a=b=c=0;

但是如果是这样:

i = a >= b && c < d && c + f <= g + h;

看完了以后,估计很少人知道这句话是什么意思。还要关心运算符的优先级,所以太复杂,不友好,容易出错。不建议使用这种方式。


条件判断语句

if语句是非常常用的语句,但是也有很多小细节值得注意。

1、不可将布尔变量直接与true、false或者1、0进行比较。

true、false的值究竟是什么并没有统一的标准。VC++与VB中的true的值就完全相反。正确的写法应该是:if (flag) 或者 if (!flag)。

不规范的写法:if (flag == true), if (flag == 1)等等。

2、整型变量与0值比较,规范的写法是 if (value == 0), if (value != 0)。不可模仿bool变量的风格。

3、不可将浮点类型变量用 == 或者 != 与任何数字比较。原因是无论是float与double类型的变量,它们都有精度限制,避免直接比较。应该设法转化成>= 或者 <=的形式。例如:

if ((double)x == 0.0) //隐含错误的比较

在VS2017版本中,允许的误差为DBL_EPSILON(精度),所以上面应该转化为

if ( (x>=-DBL_EPSILON) && (x<=DBL_EPSILON) )

4、判断指针变量是否为空,不要写成if (p == 0)或者if (p != 0)这种形式,虽然空值(NULL)与0相同,但是意义不同。

if (p == NULL) //强调p是指针变量,其他两种形式 if (p == 0)或者 if (!p)分别强调的是p是整型变量或者布尔变量。

延伸

条件判断语句中的 “==”其实也有个小细节,当一个常量比较的时候可以将常量写在前面,比如 if (NULL == p),这样写的好处是如果哪一天写代码少些了一个等于号,系统会报错,因为常量无法被修改。


for语句与switch语句

在for循环体中,不可修改循环变量,会导致逻辑紊乱,for循环失去控制。对于变量空间范围,应当采取半开半闭区间的写法,即for (int i = 0; i<N; i++); 这种写法,这种方法更直观。

延伸

循环效率:

多层循环嵌套时,如果有可能,最好将长循环放在内层,段循环放在外层,减少CPU跨切换层的次数。

如果循环体中存在条件判断,如果可能,最好放在外面。

switch语句应当注意每个case语句后面的break,除非有意的使多个分支重叠,其他都得加上break。而且结尾的default不要忘记,就算没有想要的default,也要加上一句 default :break;


goto语句

goto语句不建议使用,但不代表不能使用,一定特殊的场景goto语句有奇效。书上的一句话说的很好 “错误是程序员自己造成的,不是goto 的过错”,对于多重循环体需要跳出时,goto语句是不错的选择,避免多层break;


总结:

这一章讲的都是我们常用的表达式和语句,着重讲了我们容易忽略掉的细节,对于有一定基础的道友们回过来再看看这一章也能学到很多新知识。

以上是关于读高质量C++/C编程指南第4章的主要内容,如果未能解决你的问题,请参考以下文章

读高质量C++/C编程指南第6章

读高质量C++/C编程指南第5章

读高质量C++/C编程指南第5章

读高质量C++/C编程指南1-3章

编程语言排行榜-大学生选择专业方向的指南针

Linux操作系统-进程控制