“bool”是C ++中的一个基本数据types吗?

我在编写代码的时候有这个疑问。 “bool”是C ++标准中定义的基本数据types还是编译器提供的某种扩展? 我得到了这个疑问,因为Win32有'BOOL',它只是一个longtypes定义。 还有,如果我做这样的事情会发生什么:

int i = true; 

它是“总是”保证variables我将有价值1或者是再次取决于我正在使用的编译器? 进一步对于接受BOOL作为参数的一些Win32 API,如果我通过布尔variables会发生什么?

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

 enum bool { false, true }; 

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

是的,布尔是一个内置的types。

WIN32是C代码,而不是C ++,而C没有bool,所以他们提供了自己的typedef BOOL。

C ++为你做了很多的自动生成 – 也就是说,如果你有一个types为bool的variables,并把它传递给某个inttypes的东西,它将会把它变成一个int ,其中0表示false1true

我没有我的标准来看看这是否有保证,但我用过的每一个编译器都这样做(所以人们可以认为它会一直工作)。

但是,依靠这种转换是一个坏主意。 如果添加了一个重载int签名的新方法,代码可以停止编译

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

以供进一步参考: 布尔数据types

C应该是汇编语言之上的一个步骤。 C if语句实际上只是“分支如果零”的语法糖,所以布尔作为独立数据types的想法在当时是一个外国概念。 (1)

即使是现在,C / C ++布尔值通常也不过是单字节数据types的别名。 因此,它实际上是一个比独立数据types更有意义的标签。

(1)当然,现代编译器在处理if语句方面稍微先进一些。 这是从C作为一种新语言的angular度来看的。

Turbo c和c ++编译器不支持布尔(bool关键字)数据types,但是dev c ++编译器支持布尔(bool关键字)数据types。

虽然它现在是一个本地types,它仍然在幕后定义为一个整数(int我认为),其中文字false是0和true是1.但我认为所有的逻辑仍然认为任何事情,但0为真,所以严格来说真正的文字可能是编译器testing是否有错误的关键字。

 if(someval == true){ 

可能转化为:

 if(someval !== false){ // eg someval !== 0 

由编译器