cppcheck - duplicateConditionalAssign

以下的程式碼:
在 cppcheck 掃描後會出現 duplicateConditionalAssign,說明它與直接 a = b 邏輯上是相等的。
於是我就好奇了,這兩者跑的 assembly 指令是一樣複雜的嗎?

下圖左邊是不寫 if 而直接 a = b。右邊是有 if 判斷兩者不相等,才 a = b。


紅色是兩個檔案不一樣的地方,就是 if statement 產生的 assembly。

左圖:固定執行二行指令。
右圖:如果 a 與 b 不相等,則會執行四行指令。如果 a 與 b 相等,則會執行二行指令。

所以,cppcheck 會指出問題代表,直接 assign 比較快。但實際應用上,不等於之後通常會再做其它事情,做有 if 的寫法比較常見。

但至少我們可以記住,單純 if 判斷值不相等,再給值,其實沒有比較快。

留言

熱門文章