【发布时间】:2016-03-15 23:16:06
【问题描述】:
在 C++ 中使用比较运算符时,布尔值是否会转换为整数?
我问的原因是,是否总是明确比较 if 语句中的真/假的问题出现了。两个选项是:
1) if (my_bool == true) doSomething();
2) if (my_bool) doSomething();
我们认为您通常应该避免显式比较 (1),原因如下:
int myFunc(){return 4;}
if (myFunc() == true) doSomething();
如果您需要使用简单地返回非零来表示“真”的 C 接口,就会出现类似上述代码的内容。 myFunc() 示例在 C 中会失败,因为 myFunc 返回 4,true 被宏定义为 1,而 4 == 1 不正确。
在 C++ 中仍然是这种情况吗? “等于”运算符是否将 bool 转换为 int 而不是相反?对标准的引用(我正在使用 C++11)表示赞赏,但如果它在我有兴趣了解的语言版本之间有所不同。
(我想具体询问一下明确的真假比较的利弊,但这似乎是主观的。)
【问题讨论】:
-
假设
if (myBool == true)比if (myBool)好,那么显然if ((myBool == true) == true)更好!
标签: c++