复合表达式由常量、变量、函数和运算符组成书写应注意:
1、不要过于复杂
如:x=y>z || a<b || i+j>=i-c
2、不要与数学表达式混淆
如:if( x<y<z ) //并不表示 (x<y) && (y<z),而是 (x<y)<z
3、运算符优先级和结合性直对结果的影响
4、表达式中有些部分可能没参加运算
如:int a=1,b=2
if( a<b || ++a )
cout<<a<<endl;
输出结果为1
a<b 为真时,++a不再参加运算
if语句书写技巧与注意问题:
1、常量放在条件表达式的左侧
如:int *p = new int[10]
if( p == NULL )
{
cout<<"error!"<<endl;
exit(0);
}
上面条件表达式 p == NULL ,有时粗心会写漏一个‘=’,即写成p = NULL , “p = NULL ”为合法表达式,编译时不会报错!但要是把上面的条件表达式改为 NULL == p ,若写漏一个‘=’,即 NULL = p 。由于赋值表达式的左操作数必须是一个可修改的左值表达式,常量不是可修改的左值,编译时出错!
2、整型变量与零值比较
int value = 0;
if( 0 == value )
if( 0 != value )
但不要写成
if( value )
if( !value )
否则,会让人误解value是bool型变量,降低可读性
3、浮点变量与零值比较
由于float和double类型都有精度限制,因此浮点变量不可用==或!=与任何数字比较!常将改写成<或>或<=或>=的形式,如判断浮点变量x与2相等时,可写为 if( x-2<一个可接受的误差 )
4、指针变量与零值比较
虽然NULL与0数值上相等,但两者的意思不同!
切记不要将
if( NULL == p )
写成
if( 0 == p ) //容易误解p是整型变量
或
if( p ) //容易误解p是bool变量