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

目录
表达式和基本语句
运算符的优先级
复合表达式
条件判断语句
for语句与switch语句
goto语句
总结:
表达式和基本语句 运算符的优先级
读书|读高质量C++/C编程指南第4章
文章图片

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 =https://www.it610.com/article/= 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
延伸
循环效率:
多层循环嵌套时,如果有可能,最好将长循环放在内层,段循环放在外层,减少CPU跨切换层的次数。
如果循环体中存在条件判断,如果可能,最好放在外面。
switch语句应当注意每个case语句后面的break,除非有意的使多个分支重叠,其他都得加上break。而且结尾的default不要忘记,就算没有想要的default,也要加上一句 default :break;
goto语句
goto语句不建议使用,但不代表不能使用,一定特殊的场景goto语句有奇效。书上的一句话说的很好 “错误是程序员自己造成的,不是goto 的过错”,对于多重循环体需要跳出时,goto语句是不错的选择,避免多层break;
总结: 【读书|读高质量C++/C编程指南第4章】这一章讲的都是我们常用的表达式和语句,着重讲了我们容易忽略掉的细节,对于有一定基础的道友们回过来再看看这一章也能学到很多新知识。

    推荐阅读