在这种情况下需要检查

时间:2015-02-23 07:22:47

标签: c++ if-statement mfc

在C ++中,我将编码指南读作“在if控制语句中检查返回值” 像,

if(TRUE == fun1())
{
//Statements
}

当“fun1”返回True时,在“if”语句内部将其与“true”进行比较。 是否有必要进行外部比较。 这是一种很好的做法,还是这种编码方式会降低性能。?

2 个答案:

答案 0 :(得分:0)

取决于fun1的返回类型和TRUE的类型。

如果TRUEtruefun1返回bool,则不会降低效果,因为它与if完全相同。所以这只是无操作的混乱。

对于其他类型,它看起来很危险,甚至可能是错误的。想象一下遗留式函数返回int并记录为失败时返回0,成功时返回非零值(很多C标准库函数都是这样)。然后,假设TRUEtrue1。在这种情况下,返回2的函数(完全有效的非零值)实际上失败条件!

因此除非类型和值如此变态,TRUE0(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())
{
}

使用现代编译器和处理器,没有真正的速度影响。