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

jos*_*atv 6 c++

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

我问的原因是在if语句中是否始终明确地与true/false比较的问题出现了.这两个选项是:

1) if (my_bool == true) doSomething();
2) if (my_bool) doSomething();
Run Code Online (Sandbox Code Playgroud)

我们认为你应该通常避免明确的比较(1),因为以下内容:

int myFunc(){return 4;}
if (myFunc() == true) doSomething();
Run Code Online (Sandbox Code Playgroud)

如果您需要使用简单地返回非零以指示"true"的C接口,则会出现类似上面代码的内容.该myFunc()示例在C中将失败,因为myFunc返回4,true宏为1,并且4 == 1不为真.

在C++中仍然如此吗?"等于"运算符是否将bool转换为int而不是相反?我很欣赏对标准的引用(C++ 11是我正在使用的),但是如果它在我不想知道的语言版本之间有所不同.

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

Bri*_*ian 8

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

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

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

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

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

当两个操作数都是时bool,它们都被提升为int.如果一个操作数是a bool而另一个是整数类型,则bool操作数被提升为int.见[expr]/10:

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

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

我不认为对trueor 进行明确比较有任何性能影响false,但我不会自己做,因为我认为它是多余的,而不是产生任何好处的方式.