在C ++中,我将编码指南读作“在if控制语句中检查返回值” 像,
if(TRUE == fun1())
{
//Statements
}
当“fun1”返回True时,在“if”语句内部将其与“true”进行比较。 是否有必要进行外部比较。 这是一种很好的做法,还是这种编码方式会降低性能。?
答案 0 :(得分:0)
取决于fun1
的返回类型和TRUE
的类型。
如果TRUE
为true
且fun1
返回bool
,则不会降低效果,因为它与if
完全相同。所以这只是无操作的混乱。
对于其他类型,它看起来很危险,甚至可能是错误的。想象一下遗留式函数返回int
并记录为失败时返回0,成功时返回非零值(很多C标准库函数都是这样)。然后,假设TRUE
是true
或1
。在这种情况下,返回2的函数(完全有效的非零值)实际上失败条件!
因此除非类型和值如此变态,TRUE
为0
(MFC不是这种情况),我会说它实际上是有害的来进行比较用它。
答案 1 :(得分:0)
与TRUE相比绝不是一个好主意。
如果fun1返回一个BOOL,那么它的值实际上是一个int,并且可以有任何int值。 TRUE只是1,FALSE是0.但是int有很多其他值。与FALSE相比总是保存!
在很多情况下。函数返回"某事"这应该意味着" TRUE" (!= 0)只要它与0不同!
只要你有一个bool返回值,你就可以比较true和false,它总会有效。
这取决于样式,但我从不使用表达式来比较TRUE值(意味着不是0,而不是false)。我总是在if语句中编写没有运算符的条件。它对我有意义"如果fun1是什么"或者"如果fun1成功了"
if (fun1())
{
//Statements
}
在我们公司,这是正常的编码风格。如果我们想要反过来检查。 "如果fun1失败"
if (!fun1())
{
}
使用现代编译器和处理器,没有真正的速度影响。