是在这种情况下
问题描述:
在C++中我读到编码准则为“检查中如果控制语句返回值” 等所要求的检查,是在这种情况下
if(TRUE == fun1())
{
//Statements
}
当“FUN1”,在“if”语句返回True,在内部它将与“真实”进行比较。 是否需要进行外部比较? 这是一个很好的做法还是这种编码风格降低性能。
答
与TRUE比较并不是一个好主意。
如果fun1返回一个BOOL,那么它的值实际上是一个int值,并且可以有任何int值。 TRUE只是1,FALSE是0.但是int值有很多其他值。与FALSE比较始终保存!
在很多情况下。函数返回“某些东西”,只要它与0不同,它就应该表示“TRUE”(!= 0)!
只要你有一个bool返回值,你可以比较真和假,它会一直工作。
它取决于风格,但我从来不用表达式来比较TRUE值(意思不是0,不是假)。我总是在if语句中没有运算符的情况下写入条件。它对我有意义“如果fun1是某事”或“如果fun1成功”
if (fun1())
{
//Statements
}
在我们公司这是正常的编码风格。如果我们想检查相反的。 “如果fun1失败”
if (!fun1())
{
}
现代编译器和处理器没有真正的速度影响。
答
取决于返回类型fun1
和类型TRUE
。
如果TRUE
是true
和fun1
回报bool
,它不会降低性能,因为它不正是if
做本身。所以这只是无用的混乱。
与其他类型,它看起来很危险,甚至可能是错误的。设想一个传统风格的函数,返回int
并记录为失败时返回0,成功时返回非零值(相当多的C标准库函数就是这样)。那么,假设TRUE
是true
或1
。在这种情况下,函数返回2(一个完全有效的非零值)实际上是失败的条件!
所以除非类型和值这么变态的是TRUE
是0
(这是不使用MFC的情况下),我会说这实际上是有害与它比较。
如果'fun1'返回'BOOL',则表达式'if(fun1())'很可能会生成编译器警告。 'if(fun1()!= FALSE)'阻止该警告。 – IInspectable 2015-02-23 21:28:39