'bool'是C ++中的基本数据类型吗?

时间:2008-12-10 16:44:40

标签: c++

我在写一些代码时遇到了这个疑问。 'bool'是C ++标准中定义的基本数据类型还是编译器提供的某种扩展?我有这个疑问,因为Win32有'BOOL',这只不过是一个长期的typedef。如果我做这样的事情会发生什么:

int i = true;

是否“始终”保证变量i的值为1,还是取决于我使用的编译器?对于一些接受BOOL作为参数的Win32 API,如果我传递bool变量会发生什么?

7 个答案:

答案 0 :(得分:75)

bool是C ++中的基本数据类型。将true转换为整数类型将产生1,转换false将产生0(4.5 / 4和4.7 / 4)。在C中,直到C99,没有bool数据类型,人们做了像

这样的事情
enum bool {
    false, true
};

Windows API也是如此。从C99开始,我们将_Bool作为基本数据类型。包括stdbool.h typedef #define添加到bool并提供常量truefalse。由于与现有代码的兼容性问题,他们没有使bool成为基本数据类型(因此也就是关键字)。

答案 1 :(得分:8)

是的,bool是一种内置类型。

WIN32是C代码,而不是C ++,而C没有bool,因此它们提供了自己的typedef BOOL。

答案 2 :(得分:5)

C ++会为你做很多自动转换 - 也就是说,如果你有一个bool类型的变量并将其传递给期望int的变量,它会使它成为int }对你而言 - 0 false1 true

我没有我的标准,看看是否有保证,但我使用的每个编译器都这样做(所以可以假设它总是有效)。

然而,依靠这种转换是一个坏主意。如果添加了重载int签名等的新方法

,则代码可以停止编译

答案 3 :(得分:2)

是的,它是在1993年推出的。

供进一步参考:Boolean Datatype

答案 4 :(得分:1)

C意味着高于汇编语言。 C if语句实际上只是“branch-if-zero”的语法糖,所以布尔值作为独立数据类型的想法在当时是一个外国概念。 (1)

即使是现在,C / C ++布尔值通常只是单字节数据类型的别名。因此,它实际上更像是一个专用标签,而不是一个独立的数据类型。

(1)当然,现代编译器在处理if语句时要先进一步。这是从C作为新语言的角度出发的。

答案 5 :(得分:0)

Turbo c和c ++编译器不支持boolean(bool关键字)数据类型,但dev c ++编译器支持boolean(bool关键字)数据类型。

答案 6 :(得分:-1)

尽管它现在是一个原生类型,它仍然在幕后定义为一个整数(我认为是int),其中文字false为0而true为1.但我认为所有逻辑仍然在考虑除了0之外的任何东西都是真的,因此严格来说,真正的文字可能是编译器测试某些东西是否为假的关键字。

if(someval == true){

可能转换为:

if(someval !== false){ // e.g. someval !== 0

由编译器

免费获取贴纸的机会↓↓↓
豫ICP备18024241号-1