[英]Are C++ bools converted to ints during comparison?
在C ++中使用比较运算符时,bool是否转换为整数?
我问的原因是在if语句中是否始终明确地与true / false比较的问题出现了。 这两个选项是:
1) if (my_bool == true) doSomething();
2) if (my_bool) doSomething();
我们认为你应该通常避免明确的比较(1),因为以下内容:
int myFunc(){return 4;}
if (myFunc() == true) doSomething();
如果您需要使用简单地返回非零以指示“true”的C接口,则会出现类似上面代码的内容。 myFunc()
示例在C中会失败,因为myFunc
返回4, true
为宏,为1,而4 == 1
不为真。
在C ++中仍然如此吗? “等于”运算符是否将bool转换为int而不是相反? 我很欣赏对标准的引用(C ++ 11是我正在使用的),但是如果它在我不想知道的语言版本之间有所不同。
(我想特别询问明确的真/假比较的利弊,但这看起来似乎是主观的。)
在C ++中使用比较运算符时,bool是否转换为整数?
是。 对于关系运算符([expr.rel] / 5):
通常的算术转换是在算术或枚举类型的操作数上执行的。
对于相等运算符([expr.eq] / 6):
如果两个操作数都是算术类型或枚举类型,则对两个操作数执行通常的算术转换;
当两个操作数都是bool
,它们都被提升为int
。 如果一个操作数是bool
而另一个是整数类型,则bool
操作数被提升为int
。 见[expr] / 10:
否则,应对两个操作数执行整体促销(4.5)。
据我所知,从一开始就是如此(标准的修订版本没有区别)。
我不认为对true
或false
进行明确比较有任何性能影响,但我不会自己做,因为我认为它是多余的,而不是产生任何好处的方式。
它们没有转换,bool实际上是ARE整数类型。
看标准:
“bool类型的值是true还是false。如下所述,bool值表现为整数类型.bool类型的值参与整体促销”~C ++ 03
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.