在C++中我讀到編碼準則爲「檢查中如果控制語句返回值」 等所要求的檢查,是在這種情況下
if(TRUE == fun1())
{
//Statements
}
當「FUN1」,在「if」語句返回True,在內部它將與「真實」進行比較。 是否需要進行外部比較? 這是一個很好的做法還是這種編碼風格降低性能。
在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