将0-1 int r值转换为bool

时间:2013-09-16 08:15:51

标签: c++ performance

我有一个表达式,它返回0或1个整数作为临时值。该值可能已经在寄存器中,我想将其作为内联函数的bool返回。

有没有一种普通的方法可以做到这一点?我相信(bool)static_cast<bool>会注入额外的测试和设置说明。这对我来说太过分了,而案例是关于内存管理器的性能关键部分。

6 个答案:

答案 0 :(得分:7)

回来吧。 任何值与0不同,true0在{+ 1}}中为false

只需return内联函数中的int(返回bool)。

答案 1 :(得分:2)

假设您的整数表达式为foo,请使用!!foo获取bool值。

答案 2 :(得分:2)

你在做什么回报值?如果你正在使用它 在条件立即,编译器可能会生成 完全相同的代码,无论类型是bool 或不。将与0进行简单比较。如果你是 将它分配给bool变量,编译器通常会 生成一条额外的指令,以确保二进制值 是01(而不是其他值)。但是是什么 表达式,以便您可以确定它是0或 1?如果它类似x & 1,那么一个好的编译器会 认识到这一点,并将优化额外的指令。

编辑:

我可能会补充一点,我假设内联和优化。 如果性能是一个问题,那么这是前两个步骤 你应该服用。

答案 3 :(得分:1)

当我在cppcheck中遇到这样的性能警告时,我通常会使用最优雅的方法(至少在我看来;)):

return yourInt != 0;

这坚持假设所有与0不同的值都被认为是真的。

答案 4 :(得分:0)

怎么样

return rtVal;

只返回整数,如果不是0则返回true

答案 5 :(得分:0)

来自c ++ 2012标准(ISO / IEC N3337):

  

4.12布尔转换

     

算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为a   bool类型的prvalue。零值,空指针值或空成员指针值转换为false;   任何其他值都转换为true。类型为std :: nullptr_t的prvalue可以转换为prvalue   类型bool;结果值为false。

所以回来吧?!