Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么有人会使用int而不是bool数据类型?_C++_C_Typedef - Fatal编程技术网

C++ 为什么有人会使用int而不是bool数据类型?

C++ 为什么有人会使用int而不是bool数据类型?,c++,c,typedef,C++,C,Typedef,最近我在一个项目中看到,他们将def int键入BOOL,并用它代替BOOL。这样做有什么好处吗 typedef int BOOL; 如果他们经常与C代码接口,可能会这样做。因为C++没有一个 BOOL类型——至少直到C11(我想是,或者C99)引入了布尔布尔< /代码>类型,我不能准确地记住它是否与C++ BoOL < /代码>兼容——它们应该只是采用了 BoOL < /Cord>关键字(imHO),但是我离题了。 < C++ >在C++ C++ 98代码库中常见的是C++在C++中获得的代

最近我在一个项目中看到,他们将def int键入BOOL,并用它代替BOOL。这样做有什么好处吗

typedef int BOOL;

如果他们经常与C代码接口,可能会这样做。因为C++没有一个<代码> BOOL类型——至少直到C11(我想是,或者C99)引入了<代码>布尔布尔< /代码>类型,我不能准确地记住它是否与C++<代码> BoOL < /代码>兼容——它们应该只是采用了<代码> BoOL < /Cord>关键字(imHO),但是我离题了。 < C++ >在C++ C++ 98代码库中常见的是C++在C++中获得的代码< Boo> < /代码>。p>
因此,传统与C的兼容性就是答案。

C直到1999年的标准才有一个专用的布尔类型——任何非零值的标量都被认为是“真”,而零值则被认为是“假”。常见的惯例是使用宏和/或typedef创建布尔值:

#define BOOL int
#define TRUE (1)
#define FALSE (0)

或者类似的东西

因此,您所看到的要么是旧的(C99之前)C代码,要么是在该标准出台之前学习过C的人编写的代码


注意,C仍然认为任何非零标量值都是“true”,并且
if
for
while/do-while
语句中的控制表达式不必特别具有布尔类型。由于它是从C派生的,所以C++中也是一样的,即使它也有专用的布尔类型和运算符。p> 这有很多缺点,也没有真正的好处。如果它是一种存在布尔值的语言的任何版本,那么应该使用布尔值。这个TyPulf意味着你可以有不同的真值,不等于彼此。有些人甚至不去麻烦<代码> TyPulfF。C++和C是两种不同的语言。在 BoOL 被添加到标准C之前,定义自己是时尚的。还有很多遗留代码。彻底清除它从来都不是优先考虑的事情。@EugeneSh。这就说明C和C++现在是非常不同的语言:)我对何时引入
\u Bool
的记忆有点模糊;)那是相当多年前的事了。我可以给你一个引证。:-)ISO 9899:1999,6.2.5类型,2“声明为类型
\u Bool
的对象足够大,可以存储值0和1。”@melpomene感谢:)C不想采用
Bool
,因为太多遗留代码已经定义了自己的
Bool
版本,他们不想使所有代码无效。相反,他们从保留的名称空间中创建了另一个类型(即,名称以下划线开头,后跟大写字母)。如果你没有被遗留代码束缚的话,他们仍然通过包含
,使
bool
的使用变得非常简单。对我来说,这似乎是一个合理的妥协。@ChristianGibbons整个+大写==保留名称我很清楚,我明白他们为什么这么做。不破坏旧代码也是有道理的——有些道理。有时你不得不破鸡蛋做蛋卷,而C++已经建立了<代码>布尔O/COD>作为关键字。所以我明白了他们的理由,但我只是认为,展望未来(大多数代码都是在那里编写的),应该彻底改弦易辙,采用
bool
。但是,这只是我的意见,不是发生了什么。
typedef int bool;
static const bool true = 1;
static const bool false = 0;