这种转换有多便携.我可以确定两个断言都通过了吗?
int x = 4<5;
assert(x==1);
x = 4>5;
assert(x==0);
Run Code Online (Sandbox Code Playgroud)
不要问为什么.我知道这很难看.谢谢.
Naw*_*waz 191
int x = 4<5;
Run Code Online (Sandbox Code Playgroud)
完全便携.符合标准.bool以int转换是隐式的!
C++标准中的§4.7/ 4表示(积分转换)
如果源类型为bool,则将值
false转换为零,并将值true转换为1.
至于C,据我所知bool,C中没有(1999年之前)因此bool,int转换仅适用于C++.在C中,4<5求int值为value,在这种情况下,值为1, 4>5 将评估为0.
编辑:Jens在评论中说,C99有_Bool类型.bool是stdbool.h头文件中定义的宏.true并且false也是宏定义的stdbool.h.
C99的§7.16说,
宏
bool扩展为_Bool.[..]
true扩展为整数常量1,false扩展为整数常量0[...]
AnT*_*AnT 47
你同时标记了你的问题[C]和[C++].结果将在语言之间保持一致,但答案的结构对于每种语言都是不同的.
在C语言中,您的示例与之无关bool(也适用于C99).在C语言中,关系运算符不会产生bool结果.两者4 > 5并4 < 5是产生类型的结果的表达式int用值0或1.因此,在C中的示例中没有任何类型的"bool to int conversion".
在C++中,关系运算符确实产生了bool结果.bool值可以转换为int类型,true转换为1和false转换为0.这是由语言保证的.
PS C语言也有一个专用的布尔类型_Bool(宏别名为bool),其整数转换规则与C++中的基本相同.但是,这与您在C中的具体示例无关.再次,C中的关系运算符总是产生int(不bool)结果,而不管语言规范的版本如何.
小智 17
C标准的第6.5.8.6节说:
如果指定的关系为真,则每个运算符<(小于),>(大于),<=(小于或等于)和> =(大于或等于)将产生1,如果是,则为0 false.)结果的类型为int.