《高质量C++编程指南》第4章~表达式和基本语句--【优秀的编程思想】
目录
看似简单,但隐藏隐患
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这样是错误的,可以被编译器检查出来
-
//程序遇到if/else/return组合时
-
if (condition)
-
{
-
return x;
-
}
-
else
-
{
-
return y;
-
}
-
-
-
或者直接写成
-
return ( condition ? x : y );
4.4 循环语句的效率
-
//多重循环,长循环在外面,效率低
-
for (row=0 ; row<100; row++)
-
{
-
for (col=0; col<5; col++)
-
{
-
sum = sum + a[row][col];
-
}
-
}
-
-
//多重循环,长循环在里面,效率高!
-
for (col=0; col<5; col++)
-
{
-
for (row=0 ; row<100; row++)
-
{
-
sum = sum + a[row][col];
-
}
-
}
-
//程序简介,但是效率比较低,N较大情况下不用
-
for (i=0; i<N; i++)
-
{
-
if(condition)
-
DoSomething();
-
else
-
Other();
-
}
-
-
//程序繁琐,但是效率高,N较大情况下使用
-
if(condition)
-
{
-
for(i=0; i<N;i++)
-
DoSomething();
-
}
-
else
-
{
-
for(i=0; i<N;i++)
-
Other();
-
}
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
-
switch(variable)
-
{
-
case value1:...
-
break;
-
case value2:...
-
break;
-
...
-
default : ....
-
break;
-
}
文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。
原文链接:kings.blog.csdn.net/article/details/89525788
- 点赞
- 收藏
- 关注作者
评论(0)