C++ c++;:为什么将true或false指定给char编译很好

C++ c++;:为什么将true或false指定给char编译很好,c++,char,type-conversion,boolean,C++,Char,Type Conversion,Boolean,我想知道为什么下面的程序编译得很好 #include <iostream> int main() { char a = false; if (!a) { std::cout << "kdjk"; } char b = true; if (!b) { std::cout << "ppp\n"; } return 0; } #包括 int mai

我想知道为什么下面的程序编译得很好

#include <iostream>
int main()
{
   char a = false;
   if (!a) {
       std::cout << "kdjk";
   }
   char b = true;
   if (!b) {
       std::cout << "ppp\n";
   }
   
   return 0;
}
#包括
int main()
{
字符a=假;
如果(!a){

std::coutfalse的值是0,适合字符和
是一个检查操作数是否为0的运算符。这就是它工作的原因。

false的值是0,适合字符和
是一个检查操作数是否为0的运算符。这就是它工作的原因。

是:

char a = false;
调用从
bool
char
的隐式转换。将
bool
值转换为整数类型(例如
char
)的语言规则如下所示:

类型为
bool
的PR值可以转换为类型为
的PR值,并且
false
变为零和
true
变为一。结果是
a
的值为0,
b
的值为1

这:

调用从
bool
char
的隐式转换。将
bool
值转换为整数类型(例如
char
)的语言规则如下所示:

类型为
bool
的PR值可以转换为类型为
的PR值,并且
false
变为零和
true
变为一。结果是
a
的值为0,
b
的值为1


<代码>真< /代码>是代码> 1 < /COD>等于<代码> SOH < /代码> .<代码> false >代码> 0代码>等于<代码> NUL>代码>。相关:为什么C++部分被开发成向后兼容C,并且部分当“代码> BoOL < /C> >类型实际上添加到语言中时,它也使用了相当灵活的隐式TY。PE转换是其他类型的。这不是我喜欢的行为,但现在改变规则是一个重大的突破性改变,它将打破C++对以前C++标准和C.It的向后兼容性的相当令人印象深刻的努力。<代码>真的<代码> >代码> 1代码>等于<代码> SOHS<代码> 0 等于 NuL。相关:为什么C++部分被开发成向后兼容C,并且当“代码> BoOL < /C> >类型实际上添加到语言中时,它也使用了其他类型的相当灵活的隐式转换。这不是我喜欢的行为,但它会。现在是一个重大的突破性改变,改变规则,打破C++的令人印象深刻的努力,保持与早期C++标准的向后兼容性,C.<代码> false <代码>不是字符。@ KeththHoppon更新了答案,它是0,它符合字符。<代码> false <代码>不是字符。@ Keththpppon更新了答案。,它是0,适合角色。