gpt4 book ai didi

c++ - 比较期间 C++ bool 值是否转换为整数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:57 26 4
gpt4 key购买 nike

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

我问的原因是出现了是否始终显式比较 if 语句中的 true/false 的问题。两个选项是:

1) if (my_bool == true) doSomething();
2) if (my_bool) doSomething();

我们认为您通常应该避免显式比较 (1),原因如下:

int myFunc(){return 4;}
if (myFunc() == true) doSomething();

如果您需要使用仅返回非零值以指示“真”的 C 接口(interface),就会出现类似于上面的代码。 myFunc() 示例在 C 中会失败,因为 myFunc 返回 4,true 被宏化为 1,并且 4 == 1 不正确。

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

(我想具体询问明确的真/假比较的优缺点,但这似乎是主观的。)

最佳答案

When using comparison operators in C++, are bools converted to ints?

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

The usual arithmetic conversions are performed on operands of arithmetic or enumeration type.

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

If both operands are of arithmetic or enumeration type, the usual arithmetic conversions are performed on both operands;

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

Otherwise, the integral promotions (4.5) shall be performed on both operands.

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

我不认为对 truefalse 进行显式比较对性能有任何影响,但我自己不会这样做,因为我认为它是多余的并且不会产生任何好处。

关于c++ - 比较期间 C++ bool 值是否转换为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36024047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com