C++标准是否规定bool类型1字节存储的位值?比较逻辑如何?
C++ bool类型存储与比较的标准规定
关于bool类型的存储取值要求
C++标准明确要求bool类型的对象只能表示两个值:true和false。当bool对象被正确初始化或赋值为这两个值时,其1字节存储的内容只能是两种固定的8位值:
- 对应
false的是0x00(全0字节) - 对应
true的是0x01(最低位为1、其余位为0的字节)
这是因为标准规定bool类型的对象表示、值表示与一个实现定义的无符号整数类型一致;同时bool与整数类型互相转换时,false必须转换为0,true必须转换为1,反过来非零整数转换为true、0转换为false,这就要求bool的存储值必须严格对应0和1的字节形式。
显式初始化的bool变量的存储规定
对于代码:
bool y = true; bool n = false;
C++标准强制规定这两个变量的位内容:
- 变量
n的字节存储必须是0x00 - 变量
y的字节存储必须是0x01
关于bool类型的比较规则
如果bool变量处于未初始化状态,其存储值是不确定的(可能不是0或1),此时该变量与其他bool值或整数进行比较的结果是未定义的,程序可能出现不可预料的行为。
而对于已正确初始化/赋值的bool变量:
- 两个
bool变量之间的比较,直接基于它们的逻辑值(true或false),本质是比较存储的0或1字节值 bool与整数类型比较时,bool会先被提升为整数(true转1,false转0),再与整数进行数值比较
内容的提问来源于stack exchange,提问作者Enlico
相关产品推荐
相关产品推荐

