《高质量C++编程指南》第4章~表达式和基本语句--【优秀的编程思想】

版权声明:本文为博主原创文章,未经允许,不得转载!欢迎留言附带链接转载! https://blog.csdn.net/qq_15698613/article/details/89525788

目录

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;
}

猜你喜欢

转载自blog.csdn.net/qq_15698613/article/details/89525788