在比较期间,C ++ bool是否转换为整数?

时间:2016-03-15 23:16:06

标签: c++

在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是宏' d为1,4 == 1不为真。

C ++中的情况仍然如此吗? "是否等于"运算符将bool转换为int而不是相反?我很感激参考标准(C ++ 11是我正在使用的),但如果它的语言版本不同,我有兴趣知道。

(我想特别询问明确的真/假比较的利弊,但这看起来似乎是主观的。)

2 个答案:

答案 0 :(得分:8)

  

在C ++中使用比较运算符时,bool是否转换为整数?

是。对于关系运算符([expr.rel] / 5):

  

通常的算术转换是在算术或枚举类型的操作数上执行的。

对于相等运算符([expr.eq] / 6):

  

如果两个操作数都是算术类型或枚举类型,则执行通常的算术转换   两个操作数;

如果两个操作数均为bool,则它们都会升级为int。如果一个操作数是bool而另一个是整数类型,则bool操作数将提升为int。见[expr] / 10:

  

否则,应对两个操作数执行整数促销(4.5)。

据我所知,从一开始就是如此(标准的修订版本没有差异)。

我认为与truefalse进行明确比较并不存在任何性能影响,但我不会自己做,因为我认为它是多余的,而不是以某种方式产生任何好处。

答案 1 :(得分:1)

它们没有被转换,bool实际上是ARE整数类型。

参见标准:

" bool类型的值为true或false。如下所述,bool值表现为整数类型。 bool类型的值参与整体促销活动" 〜C ++ 03