2013-03-16 156 views
-2

我想知道如果聲明複雜if語句

if (isTrue()) //case 1 

VS

if(isTrue()==true) //case 2 

而且IsTrue運算定義爲

boolean isTrue(){ 
//lots of calculation and return true false based on that. 
return output; 
} 

我想下面的複雜性,的if (isTrue())複雜度低然後if(isTrue()==true),因爲情況2需要額外比較等於。

空間複雜度呢?

有什麼不同的想法?

+1

如何進行額外比較? – 2013-03-16 19:20:48

+0

,因爲編譯器必須用右邊的值檢查函數輸出,然後用條件測試 – minhaz 2013-03-16 19:24:23

+1

@minhaz大多數編譯器可能只是完全優化那些'if's,因爲'isTrue'只會返回'true'。 – Jeffrey 2013-03-16 19:28:35

回答

2

它們是等效的。而當做全局優化時,條件完全被刪除。

+0

如果編譯器做了也增加處理權的優化? – minhaz 2013-03-16 19:39:26

3

兩者在速度/空間上都相同。但第二種方式對於C/C++程序員來說很奇怪。

不同的是,第二種方式只是不太可讀。

+5

,對於Java程序員也很奇怪。 – TofuBeer 2013-03-16 19:21:54

1

如果您或其他人重新定義了值true,則第二種情況(檢查==true)可能會出現問題。

比方說,我們有以下的C代碼:

#define true 2 

bool isEqual(int a, int b) 
{ 
    return (a == b); 
} 

if (isEqual(5, 5)) { 
    printf("isEqual #1\n"); 
} 

if (isEqual(5, 5) == true) { 
    printf("isEqual #2\n"); 
} 

從這個代碼的輸出將是

isEqual #1 


所以較短的形式,你離開了==true不僅是最好因爲它導致代碼較少,但也是因爲你避免了這些潛在的問題。