我在编写代码时遇到了这个疑问.'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.h
将typedef #define
表示bool
并提供常量true
和false
.由于与现有代码的兼容性问题,他们没有使bool成为基本数据类型(因此也就是关键字).
是的,bool是一种内置类型.
WIN32是C代码,而不是C++,而C没有bool,因此它们提供了自己的typedef BOOL.
C++会为你做很多自动转换 - 也就是说,如果你有一个类型的变量bool
并将它传递给期望的东西int
,那么它将成为你的int
for - 0
for false
和1
for true
.
我没有我的标准,看看是否有保证,但我使用的每个编译器都这样做(所以人们可以认为它将始终有效).
但是,依靠这种转换是一个坏主意.如果添加了重载int
签名等的新方法,则代码可以停止编译.
归档时间: |
|
查看次数: |
112724 次 |
最近记录: |