2011-05-01 88 views

回答

5

其中一個是字符串文字"X",另一個是std::string的實例。一些人主張其在左側的不斷"x",因爲這樣如果你使用的不是相等==分配=,你會得到一個編譯錯誤:

if ("x" = x) // Error! Trying to assign to const char[] 

if (x = "x") // Setting the value of x to be "x", and evaluating "x". 
      // Probably not what you want. 

除此之外,真的沒有區別。

+1

技術上試圖分配給'爲const char []'我相信。 – 2011-05-01 04:56:56

+0

對,我總是忘記那一個。編輯 - 謝謝! – Lstor 2011-05-01 04:58:50

+0

這是一個不好的做法;它會降低代碼的可讀性。有關程序員的討論。我試圖找到它。 – 2011-05-01 05:19:39

0

這兩個條件之間沒有區別,除了可能是內部的東西。這就像在你手中拿着兩樣東西,每一隻手拿一件東西,然後比較它們,然後再考慮每個人的手。這不是一個因素。

1

我想這兩個電話都會致電bool std::string operator==(const std::string&, const std::string&)

這是因爲沒有從std::stringconst char*的隱式轉換運算符,但存在從const char*std::string的隱式構造函數。

編輯:

在g ++ 4.4.5兩個比較的作品。

+0

我認爲該庫爲'bool operator ==(const char *,const std :: string&)'和'bool operator ==(const std :: string&,const char *)'提供了重載,而不是依賴於隱式轉換。當然,沒有什麼能夠阻止調用其他版本的重載。 – 2011-05-01 05:05:52

0

我更喜歡使用NSString的...

([x isEqualToString:@"x"]) 

或C字符串

strcmp(str1,str2); 
+2

我們在這裏討論C++ ...... – 2011-05-01 05:02:42

+0

有Objective-C++,但我真的不理解那些更喜歡使用Foundation類而不是C++標準庫的人。 – Begemoth 2011-05-01 05:06:32

1

這裏說now closed questionYoda Conditionals

這是的事情之一我最討厭 當我在別人的 代碼中看到它時。我知道這是什麼意思,爲什麼有些人這樣做(「如果我不小心把'='替換爲' ?」)。對於 我,這很像是當一個孩子 下樓梯大聲計數 步驟。

總之,這裏是我的理由反對 它:

  • 它破壞的閱讀程序代碼的自然流動。我們,人類, 說「如果值爲零」,而不是「如果 零值」。
  • 現代編譯器警告你,當你有一個任務在你的病情, 或實際上,如果你的條件只有這一個任務,然後,是的, 看起來可疑,反正
  • 你不應該忘記把雙「的 = '如果你是一名程序員,當你比較數值時如果 。你不妨把 忘記放「!」當測試 不等於。

- mojuba


Accepted answer

啊,是的, 「尤達條件句」(「如果零 值,執行該代碼,您 絕!「)。我總是指出任何人在 lint(1)這樣的工具上聲稱他們「更好」。自70年代後期以來,這個特殊的問題已經解決了。大多數 現代語言甚至不會編譯 這個,因爲他們拒絕強制賦值爲 的結果爲布爾值。

正如其他人所說,它當然不是一個問題,但它確實引發了一點認知失調。

- TMN