可能重複:
A==B vs B==A, What are the differencesi == 0和0 == i有區別嗎?
首先代碼:
if(i==0) {// do instructions here}
二碼:
if(0==i) { // do instructions here }
什麼是迪菲在區塊之間?
可能重複:
A==B vs B==A, What are the differencesi == 0和0 == i有區別嗎?
首先代碼:
if(i==0) {// do instructions here}
二碼:
if(0==i) { // do instructions here }
什麼是迪菲在區塊之間?
功能上,沒有區別。
一些開發人員更喜歡編寫第二種格式以避免分配錯別字(如果您錯過了=
),以便編譯器警告錯字。
第二個被稱爲Yoda Condition。
我說沒有區別,因爲你無法防範對自己微不足道的每一個細節,並依靠編譯器來大聲呼喊着你。如果你打算寫一個==
你應該期望自己寫==
而不是=
。
使用第二種格式只會導致一些模糊的不可讀代碼。
此外,大部分主流的編譯器通過emitting an warning警告分配而不是平等錯字的,一旦你讓所有的警告(你應該反正)。
它太糟糕了,他們沒有把歷史鎖定在[行話問題](http://stackoverflow.com/questions/2349378/new-programming -jargon-you-coined) –
+1對於尤達條件和口袋妖怪例外處理。從未聽過這些條款。 –
@ConradFrix:他們不僅鎖定了它,它已被刪除,現在只有10k +用戶可以看到它。 –
第二個版本應該更安全。
如果您忘記了一個等號,它不會將i的值更改爲零。
在C#中沒有區別。然而,在C++中,性能有所不同,這就是爲什麼你最近在C#代碼中看到兩者都用 - 實際上我正在考慮關於性能的i ++ vs ++ i - 0 == i是C/C++中的常見編碼建議,避免i = 0作爲意外操作
當你寫(0 == i)時,如果(i = 0)被消除,使用單個等於錯誤符號的錯誤(eg)。沒有其他的。
沒有區別,有些人喜歡趕,而不是平等的測試做 分配(=
)常犯的錯誤,第二個(==
)
0 = i
會失敗在編譯
功能,它們是同C;我不確定其他語言的運營商超載等醜陋事情發揮作用。
在風格上,後者是非常反直覺,我個人覺得它非常醜陋。關鍵是讓編譯器在您不小心編寫=
而不是==
時發出錯誤,但好的編譯器可以選擇對此進行警告,因此不需要。
運算符重載是美好的! (當正確應用時)。這是我一次又一次喜歡C++的事情之一。 – leemes
是的,它們和C#一樣。 對於更復雜的情況,請訪問A==B vs B==A, What are the differences
對於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;
}
有人寫這樣的代碼當然應該被槍殺。
一個人不會花時間調試,因爲你忘了'='。 – alex
...在哪些語言環境中? –
如果您使用的是c#,那麼您至少可以從'if(i = 0){}'問題中解決,因爲該語法是非法的。 –