《高质量C++编程指南》第4章~表达式和基本语句--【优秀的编程思想】
【摘要】 目录
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这样是错误的,可以被编译器检查出来
//程序遇到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
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)