在C++中比較(x == "x")
和("x" == x)
之間的區別是什麼?假設x
是std::string
。有什麼理由爲什麼會比其他人更喜歡?在C++中比較字符串
回答
其中一個是字符串文字"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.
除此之外,真的沒有區別。
這兩個條件之間沒有區別,除了可能是內部的東西。這就像在你手中拿着兩樣東西,每一隻手拿一件東西,然後比較它們,然後再考慮每個人的手。這不是一個因素。
我想這兩個電話都會致電bool std::string operator==(const std::string&, const std::string&)
。
這是因爲沒有從std::string
到const char*
的隱式轉換運算符,但存在從const char*
到std::string
的隱式構造函數。
編輯:
在g ++ 4.4.5兩個比較的作品。
我認爲該庫爲'bool operator ==(const char *,const std :: string&)'和'bool operator ==(const std :: string&,const char *)'提供了重載,而不是依賴於隱式轉換。當然,沒有什麼能夠阻止調用其他版本的重載。 – 2011-05-01 05:05:52
我更喜歡使用NSString的...
([x isEqualToString:@"x"])
或C字符串
strcmp(str1,str2);
我們在這裏討論C++ ...... – 2011-05-01 05:02:42
有Objective-C++,但我真的不理解那些更喜歡使用Foundation類而不是C++標準庫的人。 – Begemoth 2011-05-01 05:06:32
這裏說now closed question上Yoda Conditionals:
這是的事情之一我最討厭 當我在別人的 代碼中看到它時。我知道這是什麼意思,爲什麼有些人這樣做(「如果我不小心把'='替換爲' ?」)。對於 我,這很像是當一個孩子 下樓梯大聲計數 步驟。
總之,這裏是我的理由反對 它:
- 它破壞的閱讀程序代碼的自然流動。我們,人類, 說「如果值爲零」,而不是「如果 零值」。
- 現代編譯器警告你,當你有一個任務在你的病情, 或實際上,如果你的條件只有這一個任務,然後,是的, 看起來可疑,反正
- 你不應該忘記把雙「的 = '如果你是一名程序員,當你比較數值時如果 。你不妨把 忘記放「!」當測試 不等於。
- mojuba
啊,是的, 「尤達條件句」(「如果零 值,執行該代碼,您 絕!「)。我總是指出任何人在 lint(1)這樣的工具上聲稱他們「更好」。自70年代後期以來,這個特殊的問題已經解決了。大多數 現代語言甚至不會編譯 這個,因爲他們拒絕強制賦值爲 的結果爲布爾值。
正如其他人所說,它當然不是一個問題,但它確實引發了一點認知失調。
- TMN
- 1. 比較字符串指針?比較字符串C
- 2. 在C#中比較字符串
- 3. 在Objective-C中比較字符串
- 4. 字符串比較C#
- 5. 比較字符串C++
- 6. 字符串比較C++
- 7. 字符串比較C - strcmp()
- 8. C++字符串比較
- 9. C#字符串比較?
- 10. 字符串比較 - C
- 11. Objective-C字符串比較
- 12. c#比較2字符串
- 13. C#比較字符串ignoreCase
- 14. C# - 比較字符串
- 15. 比較字符串(C++)
- 16. 字符串比較與目標C中的類比較-C
- 17. 在C#與性格比較字符串
- 18. Objective-C中的字符串比較
- 19. 如何比較C++中的字符串?
- 20. C中的字符串比較#
- 21. 比較C中的字符串 - strcmp
- 22. 比較C++中的兩個字符串
- 23. c中的字符串比較#
- 24. 比較C#中的兩個字符串
- 25. c#中的字符串比較#
- 26. C++比較c字符串的問題
- 27. C字符串的比較運算符
- 28. 字符串比較C# - 全字匹配
- 29. 字符串比較
- 30. 比較字符串
技術上試圖分配給'爲const char []'我相信。 – 2011-05-01 04:56:56
對,我總是忘記那一個。編輯 - 謝謝! – Lstor 2011-05-01 04:58:50
這是一個不好的做法;它會降低代碼的可讀性。有關程序員的討論。我試圖找到它。 – 2011-05-01 05:19:39