在VC++中,我们有数据类型“BOOL”,它可以取值为TRUE或FALSE,还有数据类型“bool”,它可以取值为true或false。
它们之间有什么区别,应该在什么情况下使用每个数据类型?
在VC++中,我们有数据类型“BOOL”,它可以取值为TRUE或FALSE,还有数据类型“bool”,它可以取值为true或false。
它们之间有什么区别,应该在什么情况下使用每个数据类型?
bool
是内置 C++ 类型,而 BOOL
是 Microsoft 特定的类型,它被定义为一个 int
。你可以在 windef.h
中找到它:
typedef int BOOL;
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
< p > 一个 bool
类型的值可以是 true
或者 false
,而对于 BOOL
类型,你可以使用任何 int
值,尽管在 windef.h
头文件中定义了 TRUE
和 FALSE
宏。
这意味着对于 bool
,sizeof
运算符将返回 1(虽然标准规定 bool
的大小是实现定义的),而对于 BOOL
,它将返回 4。
来源:Codeguru 文章
在C++中添加bool
类型之前,Windows API就已经有了这种类型。因此在所有需要使用BOOL的Windows函数中仍然存在它。C语言不支持bool
数据类型,因此BOOL
必须保留。
补充一下luvieere所说的,从返回一个BOOL
类型的函数中,你可以返回除TRUE
或FALSE
之外的其他值,例如:
BOOL myFunc(int a)
{
if (a < 3) return FALSE;
else if (a > 3) return TRUE;
else return 2;
}
这是可能的,因为BOOL
本质上是一个int
。
请注意,这不是建议做法,因为它会严重破坏代码的可读性,但是你可能会遇到这种情况,然后你会想知道为什么会这样。
BOOL
视为TRUE
。由于这种行为不一致,您应该始终明确使用TRUE
(即1
),而不是非零值。这可能有些棘手,因为某些语言将True
定义为所有位设置(对于有符号整数为-1
)。 - Marc Durdin