为什么有人会使用 int 而不是 bool 数据类型?
Why would someone use int instead of bool data type?
最近我在一个项目中看到他们将 int 类型定义为 BOOL 并使用它代替 bool。这样做有什么好处吗?
typedef int BOOL;
如果他们经常与 C 代码交互,他们可能会这样做。由于 C 没有 bool
类型——至少直到 C11(我认为是,或者可能是 C99)引入了 _Bool
类型——老实说,我不记得它是否与 C++ 兼容 bool
- 他们应该刚刚采用 bool
关键字(恕我直言),但我离题了。
此外,在旧的 C++ 代码库中,pre-date C++ 获得 bool
的 C++98 标准很常见。
所以 legacy 和 C 兼容性 就是答案。
C 在 1999 年标准之前没有专用的布尔类型 - 任何具有 non-zero 值的标量都被认为是 "true",而零值被认为是 "false"。一个常见的 约定 是使用宏 and/or 类型定义来创建布尔值:
#define BOOL int
#define TRUE (1)
#define FALSE (0)
或
typedef int bool;
static const bool true = 1;
static const bool false = 0;
或类似的东西。
所以您看到的是旧的(C99 之前的)C 代码,或者是在该标准出现之前学习 C 的人编写的代码。
请注意,C 仍然认为 any non-zero 标量值是 "true",并且 if
和 [=13= 中的控制表达式] 和 while/do while
语句不必特别具有布尔类型。由于它源自 C,因此在 C++ 中也是如此,尽管它也有专用的布尔类型和运算符。
最近我在一个项目中看到他们将 int 类型定义为 BOOL 并使用它代替 bool。这样做有什么好处吗?
typedef int BOOL;
如果他们经常与 C 代码交互,他们可能会这样做。由于 C 没有 bool
类型——至少直到 C11(我认为是,或者可能是 C99)引入了 _Bool
类型——老实说,我不记得它是否与 C++ 兼容 bool
- 他们应该刚刚采用 bool
关键字(恕我直言),但我离题了。
此外,在旧的 C++ 代码库中,pre-date C++ 获得 bool
的 C++98 标准很常见。
所以 legacy 和 C 兼容性 就是答案。
C 在 1999 年标准之前没有专用的布尔类型 - 任何具有 non-zero 值的标量都被认为是 "true",而零值被认为是 "false"。一个常见的 约定 是使用宏 and/or 类型定义来创建布尔值:
#define BOOL int
#define TRUE (1)
#define FALSE (0)
或
typedef int bool;
static const bool true = 1;
static const bool false = 0;
或类似的东西。
所以您看到的是旧的(C99 之前的)C 代码,或者是在该标准出现之前学习 C 的人编写的代码。
请注意,C 仍然认为 any non-zero 标量值是 "true",并且 if
和 [=13= 中的控制表达式] 和 while/do while
语句不必特别具有布尔类型。由于它源自 C,因此在 C++ 中也是如此,尽管它也有专用的布尔类型和运算符。