BOOL和bool有什么区别?

Ume*_* MS 32 windows winapi mfc visual-c++

在VC++中,我们有数据类型"BOOL",可以假设值为TRUE或FALSE,并且我们有数据类型"bool",它可以假定值为true或false.

它们之间的区别是什么时候应该使用每种数据类型?

luv*_*ere 38

bool是一个内置的C++类型,BOOL而是一个Microsoft特定类型,定义为int.您可以在windef.h以下位置找到它:

typedef int                 BOOL;

#ifndef FALSE
#define FALSE               0
#endif

#ifndef TRUE
#define TRUE                1
#endif
Run Code Online (Sandbox Code Playgroud)

一个值boolARE truefalse,而对于BOOL您可以使用任何int价值,虽然TRUEFALSE宏在定义的windef.h头.

这意味着sizeof运算符将产生1 bool(标准状态,但bool实现定义的大小),以及4 BOOL.

资料来源:Codeguru文章

  • 在64位Windows机器上,sizeof(BOOL)仍为4.将自身与编译器类型实现隔离是这些typedef存在的原因. (5认同)
  • 警告:在Microsoft c ++中未指定sizeof(bool),并且在c ++ 4.2和5.0之间从4字节更改为1字节(请参阅http://msdn.microsoft.com/en-US/en-use/library/tf4dy80a.aspx ) (5认同)

Aja*_*jay 14

Windows API在bool抛入C++ 之前就具有此类型.这就是为什么它仍然存在于所有采用BOOL的Windows功能中.C不支持bool数据类型,因此BOOL必须保留.

  • C99标准确实包含了bool类型,尽管大多数C编译器直到最近才支持bool. (3认同)

Aam*_*mir 10

要添加到什么luvieere说,你可以返回其他的东西比TRUEFALSE从函数返回一个BOOL

BOOL myFunc(int a)
{
    if (a < 3) return FALSE;
    else if (a > 3) return TRUE;
    else return 2;
}
Run Code Online (Sandbox Code Playgroud)

这是可能的,因为a BOOL本质上是一个int.

请注意,这是不可取的,因为它严重破坏了代码的一般可读性,但它是你可以遇到的东西,你会想知道为什么会这样.

  • +1指出这是一个非常糟糕的主意.使用BOOL的全部原因是将值限制为TRUE/FALSE; 如果你想要`int`你应该使用`int`. (7认同)