2012年(158)
分类: C/C++
2012-11-20 09:33:03
C++中布尔类型关键字名称是bool,只存在两个状态:true 和 false;
C(当然是指最近的C99标准)中布尔类型关键字名称是_Bool,
按理只应该存在两个状态: 1 和 0;
同时在stdbool.h中存在几个宏,内容如下:
#define bool _Bool
#define
true 1
#define
false 0
VC++6.0是一个C/C++编译器,因此它包含C++的bool,但因为VC++6.0不支持C99标准,因此不含C的_Bool,VC++6.0独有的布尔类型是BOOL,它不是关键字,定义于windef.h中
typedef
int BOOL;
在MFC的头文件afx.h中定义
#define FALSE 0
#define TRUE 1
布尔类型按理只应该存在两个状态:真(1) 和
假(0)。
布尔型转化为整型(布尔型当然也属于整形)时,真为1,假为0;
整型转化为布尔型时,非0(未必只有1)即真(1),0即假(0)。
因为_Bool和bool是C++的内建类型,因此非0转化为布尔型时,非0都变为1(真),除非你使用变态的
bool
b;
scanf( "%d", &b ) 或 *(int*)&b = 2;
等手段。
但要注意的是VC中特有的BOOL只是一个int,它不可能将非0的值都转化为1,比如
BOOL b = 3;
此时 b 是 真
状态,但它不等于TRUE。
bool(包括_Bool)类型的比较:
1. 布尔类型本身就是比较结果的类型,因此无须再次将布尔变量和真假状态进行比较。
if( b ==
true ) 和 if( b == false ) 是多余的,应当直接写成
if( b ) 和 if( !b )
2.
两个布尔变量的比较,写法如下:
if( a == b ) 和 if( a != b )
BOOL类型的比较:
1. 布尔类型本身就是比较结果的类型,因此无须再次将布尔变量和真假状态进行比较。
if( b == TRUE )
和 if( b == FALSE ) 是多余的,其实也是错误的。
正确的比较方法是:
if( b ) 和 if( !b )
2.
如果一定要将布尔变量和真假进行比较,应该使用如下语句:
if( b != FALSE ) 和 if( b == FALSE
),道理上面说过了,BOOL为'真'状态时未必就等于TRUE。
3. 两个布尔变量的比较
错误的做法:
if( a == b ) 和 if(
a != b )
正确的做法:
if( ( a && b ) || ( !a && !b ) ) 和 if( ( a
&& !b ) || ( !a && b ) )
能不用BOOL就别用BOOL
1.
如上所述,它有很多隐患
2. BOOL是VC特有的,不属于C/C++内容。
-------------- 2007-05-10 补充
--------------
C++规定对一个bool左值做++运算,其值为true。
也就是说即使你通过强制的手段在一个bool变量中放入了-1,执行++后,值也为1,而不是0