2015-02-23 339 views
1

在C++中我讀到編碼準則爲「檢查中如果控制語句返回值」 等所要求的檢查,是在這種情況下

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

當「FUN1」,在「if」語句返回True,在內部它將與「真實」進行比較。 是否需要進行外部比較? 這是一個很好的做法還是這種編碼風格降低性能。

回答

0

與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

0

取決於返回類型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