2012-05-18 140 views
7

可能重複:
A==B vs B==A, What are the differencesi == 0和0 == i有區別嗎?

首先代碼:

if(i==0) {// do instructions here} 

二碼:

if(0==i) { // do instructions here } 

什麼是迪菲在區塊之間?

+7

一個人不會花時間調試,因爲你忘了'='。 – alex

+0

...在哪些語言環境中? –

+3

如果您使用的是c#,那麼您至少可以從'if(i = 0){}'問題中解決,因爲該語法是非法的。 –

回答

28

功能上,沒有區別。
一些開發人員更喜歡編寫第二種格式以避免分配錯別字(如果您錯過了=),以便編譯器警告錯字。
第二個被稱爲Yoda Condition

Yoda Condition

我說沒有區別,因爲你無法防範對自己微不足道的每一個細節,並依靠編譯器來大聲呼喊着你。如果你打算寫一個==你應該期望自己寫==而不是=
使用第二種格式只會導致一些模糊的不可讀代碼。
此外,大部分主流的編譯器通過emitting an warning警告分配而不是平等錯字的,一旦你讓所有的警告(你應該反正)。

+3

它太糟糕了,他們沒有把歷史鎖定在[行話問題](http://stackoverflow.com/questions/2349378/new-programming -jargon-you-coined) –

+0

+1對於尤達條件和口袋妖怪例外處理。從未聽過這些條款。 –

+0

@ConradFrix:他們不僅鎖定了它,它已被刪除,現在只有10k +用戶可以看到它。 –

7

第二個版本應該更安全。

如果您忘記了一個等號,它不會將i的值更改爲零。

0

在C#中沒有區別。然而,在C++中,性能有所不同,這就是爲什麼你最近在C#代碼中看到兩者都用 - 實際上我正在考慮關於性能的i ++ vs ++ i - 0 == i是C/C++中的常見編碼建議,避免i = 0作爲意外操作

1

當你寫(0 == i)時,如果(i = 0)被消除,使用單個等於錯誤符號的錯誤(eg)。沒有其他的。

1

沒有區別,有些人喜歡趕,而不是平等的測試做 分配(=)常犯的錯誤,第二個(==

0 = i會失敗在編譯

5

功能,它們是同C;我不確定其他語言的運營商超載等醜陋事情發揮作用。

在風格上,後者是非常反直覺,我個人覺得它非常醜陋。關鍵是讓編譯器在您不小心編寫=而不是==時發出錯誤,但好的編譯器可以選擇對此進行警告,因此不需要。

+1

運算符重載是美好的! (當正確應用時)。這是我一次又一次喜歡C++的事情之一。 – leemes

2

對於C++,雖然不太可能,但可能存在差異。這取決於我的類型。例如

struct Foo 
{ 
    int x; 
}; 

bool operator==(Foo lhs, int rhs) 
{ 
    return lhs.x == rhs; 
} 

bool operator==(int lhs, Foo rhs) 
{ 
    std::cout << "Hi!"; 
    return true; 
} 

有人寫這樣的代碼當然應該被槍殺。

相關問題