这种转换有多便携.我可以确定两个断言都通过了吗?
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.