在VisualStudio,经常有很多BOOL和bool穿梭在代码中,而这大小写的细微差异,却导致他们的实质不一样了。我们先来分析下面这个例子:
程序如下:......CFileFind finder;bool bWorking =finder.FindFile("c:\\文件.txt");......编译提示:warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)查询MSDN CFileFind::FindFile (MFC):virtual BOOL FindFile( LPCTSTR pstrName = NULL, DWORD dwUnused = 0 ); 你会发现FindFile函数的返回值是BOOL类型,却不是bool类型,因此把代码中的bool改为BOOL即可解决。可为什么会出现这样的情况呢?其实,BOOL类型在windef.h头文件中被定义,typedef int BOOL,其实际类型为int。在<wtypes.h>中,typedef long BOOL。而bool是标准C++数据类型。换句话说,BOOL其实就是int型变量,与布尔型bool没有什么关系。 在这里,函数返回了一个int类型的值,如果我们使用bool类型来接收,那么编译器当然会提示错误。
区别的详细比较
- 类型不同:bool是基本数据类型,BOOL被定义为基本数据类型int
- 长度不同:bool只占一个字节,BOOL长度视实际环境来定,一般可认为是4个字节
- 取值不同:bool取值false和true,BOOL是一个三值逻辑(TRUE/FALSE/ERROR)