[英]String compare in c++
C++ 中的(x == "x")
和("x" == x)
比較有什么區別? 假設x
是一個std::string
。 有什么理由為什么一個人會比另一個人更受歡迎?
一個是字符串文字"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 上,兩個比較都有效。
當我在別人的代碼中看到它時,這是我最討厭的事情之一。 我知道這意味着什么以及為什么有些人這樣做(“如果我不小心把'='代替了怎么辦?”)。 對我來說,這就像一個孩子下樓梯時大聲數步數一樣。
無論如何,這是我的 arguments 反對它:
- 它破壞了閱讀程序代碼的自然流程。 我們人類會說“如果價值為零”而不是“如果零就是價值”。
- 現代編譯器會在您的條件中有賦值時警告您,或者實際上如果您的條件僅包含該賦值,是的,無論如何看起來都是可疑的
- 如果您是程序員,則在比較值時不應忘記輸入雙 '='。 你還不如忘記放“。” 在測試不等式時。
-莫朱巴
啊,是的,“尤達條件”(“如果值為零,則必須執行此代碼。”)。 我總是指出任何聲稱他們在 lint(1) 之類的工具上“更好”的人。 自 70 年代后期以來,這個特殊問題已經得到解決,大多數現代語言甚至都不會編譯它。 因為他們拒絕將分配的結果強制為布爾值。
正如其他人所說,這當然不是問題,但確實會引起一些認知失調。
- TMN
這兩個條件之間沒有區別,除了可能是內部的東西。 這就像你手里拿着兩件東西,每只手拿一個,然后比較它們——然后根據每個人在哪只手上進行計算。......這不是一個因素。
我更喜歡使用 NSStrings ...
([x isEqualToString:@"x"])
或用於 c 字符串
strcmp(str1,str2);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.