是在这种情况下

是在这种情况下

问题描述:

在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()) 
{ 
} 

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

+0

如果'fun1'返回'BOOL',则表达式'if(fun1())'很可能会生成编译器警告。 'if(fun1()!= FALSE)'阻止该警告。 – IInspectable 2015-02-23 21:28:39

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

如果TRUEtruefun1回报bool,它不会降低性能,因为它不正是if做本身。所以这只是无用的混乱。

与其他类型,它看起来很危险,甚至可能是错误的。设想一个传统风格的函数,返回int并记录为失败时返回0,成功时返回非零值(相当多的C标准库函数就是这样)。那么,假设TRUEtrue1。在这种情况下,函数返回2(一个完全有效的非零值)实际上是失败的条件!

所以除非类型和值这么变态的是TRUE0(这是不使用MFC的情况下),我会说这实际上是有害与它比较。

+0

这个问题被标记为MFC,这是相当古老,但没有疯狂。我确定MFC中的“TRUE”不为零。 – MSalters 2015-02-23 07:56:56

+0

如果我们只考虑MFC编码的情况,那么我认为编码风格可以采用..如果不纠正我请 – nandeesh 2015-02-26 05:00:05

+0

@nandeesh我仍然建议反对它。只要'fun1()'返回布尔值之外的东西,它就会失败。 – Angew 2015-02-26 07:12:38