我有一个表达式,它返回0或1个整数作为临时值。该值可能已经在寄存器中,我想将其作为内联函数的bool返回。
有没有一种普通的方法可以做到这一点?我相信(bool)
和static_cast<bool>
会注入额外的测试和设置说明。这对我来说太过分了,而案例是关于内存管理器的性能关键部分。
答案 0 :(得分:7)
回来吧。 任何值与0
不同,true
且0
在{+ 1}}中为false
。
只需return
内联函数中的int
(返回bool
)。
答案 1 :(得分:2)
假设您的整数表达式为foo
,请使用!!foo
获取bool
值。
答案 2 :(得分:2)
你在做什么回报值?如果你正在使用它
在条件立即,编译器可能会生成
完全相同的代码,无论类型是bool
或不。将与0
进行简单比较。如果你是
将它分配给bool
变量,编译器通常会
生成一条额外的指令,以确保二进制值
是0
或1
(而不是其他值)。但是是什么
表达式,以便您可以确定它是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。
所以回来吧?!