高质量C++/C编程指南 之 表达式和基本语句

 

表达式和基本语句

运算符的优先级:一元运算符+ - *的优先级高于对应的二元运算符

高质量C++/C编程指南 之 表达式和基本语句

【规则 4-1-1 如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。

 

复合表达式:如a = b = c = 0

存在的理由1)书写简洁;2)可以提高编译效率。

【规则 4-2-1 不要编写太复杂的复合表达式。

【规则 4-2-2 不要有多用途的复合表达式。

如: d = (a = b + c) + r ; 该表达式既求 a 值又求 d 值。

【规则 4-2-3 不要把程序中的复合表达式与真正的数学表达式混淆。

如: if (a < b < c)      // a < b < c 是数学表达式而不是程序表达式

并不表示 if  ((a<b)&&(b<c))

而是成了令人费解的 if ( (a<b)<c)

 

if语句:以“与零值比较”为例

布尔变量与零值比较

【规则 4-3-1 不可将布尔变量直接与 TRUE FALSE 或者10进行比较。

如:假设布尔变量名字为 flag,它与零值比较的标准 if 语句如下:

if (flag)      // 表示 flag 为真

if (!flag)     // 表示 flag 为假
其它的用法都属于不良风格, 例如:

if (flag == TRUE)
if (flag == 1 )
if (flag == FALSE)
if (flag == 0)

整型变量与零值比较

【规则 4-3-2 应当将整型变量用“==” =”直接与 0 比较。

如:假设整型变量的名字为 value 它与零值比较的标准 if 语句如下:

if (value == 0)
if (value != 0)

不可模仿布尔变量的风格而写成

if (value) // 会让人误解 value 是布尔变量
if (!value)

 

浮点变量与零值比较

【规则 4-3-3 不可将浮点变量用“==”或“!=”与任何数字比较。

千万要留意, 无论是 float 还是 double 类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”=” 与数字比较,应该设法转化成“>=”“<=”形式。

如:假设浮点变量的名字为 x,应当将

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

转化为

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

其中 EPSINON 是允许的误差( 即精度)。

 

指针变量与零值比较

【规则 4-3-4 应当将指针变量用”==””!=”NULL比较。

 

if语句的补充说明

if (NULL == p) 取代 if (p == NULL):防止将”==”误写成”=”,编译器又不报错

if (condition)      改写成: if (condition)      或者: return (condition ? x : y);

       return x;              {

return y;                       return x;

                                        }

                         else

                         {

                              return y;

}

 

循环语句的效率

【建议 4-4-1 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少 CPU 跨切循环层的次数。例如示例 4-4(b) 的效率比示例4-4(a) 的高。

高质量C++/C编程指南 之 表达式和基本语句

【建议 4-4-2 如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到 循环体的外面。如果 N 非常大,最好采用判断逻辑外提的写法,可以提高效率。如果 N 非常小,两者效率差别并不明显,不需将判断逻辑外提,因为程序更加简洁。

 

for语句的循环控制变量

【规则 4-5-1 不可在 for 循环体内 修改循环变量,防止 for 循环失去控制。

【建议 4-5-1 建议 for 语句的循环控制变量的取值采用半开半闭区间写法。

高质量C++/C编程指南 之 表达式和基本语句

 

switch语句

switch (variable)
{

case value1 : …

break;
case value2 : …

break;

default : …

break;

}

【规则 4-6-1 每个 case 语句的结尾不要忘了加 break,否则将导致多个分支重叠(除非有意使多个分支重叠)。

【规则 4-6-2】不要忘记最后那个 default 分支。 即使程序真的不需要 default 处理,也应该保留语句 default : break; 这样做并非多此一举,而是为了 防止别人误以为你忘default 处理。

 

goto语句

它能从多重循环体中咻地一下子跳到外面,用不着写很多次的 break 语句;

我们主张少用、慎用 goto 语句,而不是禁用。

原文链接: https://www.cnblogs.com/XiaoS/archive/2010/02/03/1662501.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    高质量C++/C编程指南 之 表达式和基本语句

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/7912

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月6日 下午6:32
下一篇 2023年2月6日 下午6:32

相关推荐