在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