我提到这个问题,其中一些答案表明bool
是整型(IDE 也将其视为关键字)。
然而,没有一个答案表明中提供的信息cplusplus,这说明了bool
是一个宏,通过添加<cstdbool>
(在这种情况下,编译器可能会在编译时隐式添加此标头以允许bool
)。这是 g++ 版本<stdbool.h>.
那么到底是什么bool
是?整型关键字还是宏?
In C, bool
是一个宏。
没有名为 的内置类型或关键字bool
在 C 中,因此典型的实现使用标准库来#define
true
and false
to 1
and 0
分别。诸如以下规则if
语句是用“零”和“非零”表达式定义的,因此依赖于扩展的宏定义true
and false
:
[C99: 6.8.4.1/2]:
在这两种形式中,如果表达式比较不等于 0,则执行第一个子语句。在 else 形式中,如果表达式比较等于 0,则执行第二个子语句。如果通过标签到达第一个子语句,则不会执行第二个子语句。被执行。
为了方便,C99添加了内置的中间类型_Bool
,以及该语言的典型实现#define
bool
to _Bool
。该类型的定义如下:
[C99: 6.2.5/2]:
声明为类型的对象_Bool
足够大以存储值 0 和 1。
这允许与 C++ 程序更好的兼容性,其中可能包括使用bool
类型;确实,不过,#define _Bool int
可能就足够了。
In C++, bool
既是内置类型又是关键字。
您提供的链接并没有这么说bool
是C++中的宏。它说:
C 中此标头的目的是添加 bool 类型以及 true 和 false 值作为宏定义。
在直接支持这些类型的 C++ 中,标头仅包含一个可用于检查类型是否受支持的宏。
这是正确的。
语义上(也就是说,就代码的“含义”而言),[C++11: 3.9.1/2]
定义bool
作为 C++ 中的整型。
词汇上(也就是说,就代码中的“外观”而言),[C++11: 2.12/1]
将其列为关键字。实际上,all作为整数类型名称一部分的标记也是关键字,包括(但不限于):
int
unsigned
long
bool
short
signed
然而,它是neverC++ 中的宏。相反,你会得到一个宏__bool_true_false_are_defined
您可以在多语言代码中使用它来切换处理bool
取决于您使用的是 C 还是 C++;请注意,我不确定我能想到一个有用的例子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)