“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.h
将typedef#定义为bool
并提供常量true
和false
。 由于与现有代码的兼容性问题,他们并没有使bool成为基本的数据types(因此也是关键字)。
是的,布尔是一个内置的types。
WIN32是C代码,而不是C ++,而C没有bool,所以他们提供了自己的typedef BOOL。
C ++为你做了很多的自动生成 – 也就是说,如果你有一个types为bool
的variables,并把它传递给某个int
types的东西,它将会把它变成一个int
,其中0
表示false
, 1
为true
。
我没有我的标准来看看这是否有保证,但我用过的每一个编译器都这样做(所以人们可以认为它会一直工作)。
但是,依靠这种转换是一个坏主意。 如果添加了一个重载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
由编译器