【发布时间】:2011-09-19 05:11:30
【问题描述】:
在 VC++ 中,我们有数据类型“BOOL”,它可以假设值为 TRUE 或 FALSE,我们有数据类型“bool”,它可以假设值为 true 或 false。
它们有什么区别,什么时候应该使用每种数据类型?
【问题讨论】:
标签: windows winapi visual-c++ mfc
在 VC++ 中,我们有数据类型“BOOL”,它可以假设值为 TRUE 或 FALSE,我们有数据类型“bool”,它可以假设值为 true 或 false。
它们有什么区别,什么时候应该使用每种数据类型?
【问题讨论】:
标签: windows winapi visual-c++ mfc
在bool 被投入 C++ 之前,Windows API 就有这种类型。这就是为什么它仍然存在于所有采用 BOOL 的 Windows 函数中的原因。 C 不支持bool 数据类型,因此BOOL 必须保留。
【讨论】:
bool 是内置 C++ 类型,而 BOOL 是 Microsoft 特定类型,定义为 int。你可以在windef.h找到它:
typedef int BOOL;
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
bool 的值为true 和false,而BOOL 可以使用任何int 值,尽管TRUE 和FALSE 宏在windef.h 标头中定义.
这意味着sizeof 运算符将为bool 产生1(尽管标准规定bool 的大小是实现定义的),为BOOL 产生4。
【讨论】:
为了补充 luvieere 所说的,您可以从返回 BOOL 的函数中返回 TRUE 或 FALSE 以外的其他内容,例如,
BOOL myFunc(int a)
{
if (a < 3) return FALSE;
else if (a > 3) return TRUE;
else return 2;
}
这是可能的,因为BOOL 本质上是int。
请注意,这是不可取的,因为它严重破坏了代码的一般可读性,但您可能会遇到这种情况,您会想知道为什么会这样。
【讨论】:
int,你应该使用int。
BOOL 视为TRUE。因为这种行为不一致,所以您应该始终明确地使用TRUE(即1)而不是非零。这可能很棘手,因为some languages 将True 定义为所有位集(-1 用于有符号整数)