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

Nav*_*een 58 c++

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

int i = true;
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*itb 77

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

enum bool {
    false, true
};
Run Code Online (Sandbox Code Playgroud)

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


jal*_*alf 8

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

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

  • C现在确实有一个bool,但是当win32 api首次出现时它没有回来. (6认同)

haz*_*zen 5

C++会为你做很多自动转换 - 也就是说,如果你有一个类型的变量bool并将它传递给期望的东西int,那么它将成为你的intfor - 0for false1for true.

我没有我的标准,看看是否有保证,但我使用的每个编译器都这样做(所以人们可以认为它将始终有效).

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