2013-06-27 41 views
4

我目前不得不爲一個同事做一些假期替換,並且必須改變他的一些代碼。真的==特別的東西?

我發現了很多的條件,像

if (true == variablename) {...} 

我只是想知道,如果有什麼特別之處語法?像我們大多數人一樣,我只會寫

if (variablename) {...} 

改爲。令我感到不適的是左側的情況。它會在右側,我只是期望同事不會在布爾條件下前進。

是否有任何性能差異或類似的東西,通過把真實的開始?

+0

[檢查布爾是否爲真?](http://stackoverflow.com/questions/3685002/check-if-boolean-is-true) – NINCOMPOOP

+0

絕對不。這主要是關於左側的「真實」站位。 –

回答

11

這可能是從學習C/C++,它是典型的通過這個bug咬吃剩的:

if (variablename = true) { ... } 

之前的編譯器調整爲警告這個(請注意,它的轉讓,不一個比較),上面的代碼默默執行一個bug。

不過,如果你學會了寫其他方式表達,你就不會通過上面的代碼咬傷,因爲它不會以這種形式編譯:

if (true = variablename) { ... } 

在C#中,但是,它是不是一個問題,你可以像沒有比較那樣寫出它(只要它與true相比),或者將文字放在比較運算符的右側。

+0

C++ - 參數似乎是合法的。他很早就開始編碼了,我相信:) –

4

不,沒有任何區別,它只是一種代碼風格。那是。

浮現在我的腦海裏唯一的一點是:

如果variablename成爲Nullable type(由於一些重構,打字錯誤或任何其他),這段代碼仍然編譯和正常工作。

相反,如果你寫這樣的:

if (variablename) {...} 

你會得到編譯時錯誤,所以你會被迫改變代碼。

+0

謝謝。這可能是一個問題,我沒有想到,但是如果真的是對的,它不應該受到影響,對嗎? –

+1

@ OleAlbers:不,沒有任何區別。 – Tigran

2

是否有任何性能差異或類似的東西,通過把真實的開始?

我認爲在開始的時候對真正的C++背景是很常見的,通過將if(b = true)而不是if(b==true)來分配價值很容易;而你不能這樣做if(true = b)