-1

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

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

4

6 回答 6

7

就退货吧。任何不同于0istrue0isfalse在 c++ 中的值。

只是来自您returnint内联函数(返回bool)。

于 2013-09-16T08:17:18.390 回答
2

假设您的整数表达式是foo,然后用于!!foo获取bool值。

于 2013-09-16T08:17:30.063 回答
2

你对返回值做了什么?如果您在条件下立即使用它,编译器可能会生成完全相同的代码,而不管类型是否bool 存在。会有一个简单的比较0。如果将其分配给bool变量,编译器通常会生成额外的指令,以确保二进制值是01(而不是其他值)。但是表达式是什么,以便您可以确定它是 0 还是 1?如果它是类似x & 1的,一个好的编译器会识别它,并优化额外的指令。

编辑:

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

于 2013-09-16T09:03:34.707 回答
1

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

return yourInt != 0;

这坚持假设所有不同于 0 的值都被认为是正确的。

于 2013-09-16T08:22:26.863 回答
0

怎么样

return rtVal;

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

于 2013-09-16T08:18:05.530 回答
0

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

4.12 布尔转换

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

所以直接退货?!

于 2013-09-16T08:20:23.103 回答