c++中的字符串比较

String compare in c++

本文关键字:比较 字符串 c++      更新时间:2023-10-16

c++中(x == "x")("x" == x)比较的区别是什么?假设xstd::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::stringconst char*的隐式转换操作符,但有从const char*std::string的隐式构造函数。

编辑:

这里是尤达条件句的封闭问题:

这是我最讨厌的事情之一尤其是当我看到别人的时候代码。我知道这意味着什么,也知道为什么有些人这样做("如果我不小心把'='写成了?")。为就像我小时候一样走下楼梯数着大声走出来。

无论如何,这是我反对的理由:

  • 它破坏了读取程序代码的自然流程。我们人类,说"if值为零"而不是"if"
  • 现代编译器在你的条件中有赋值时警告你,或者如果你的条件包括只是那个任务,是的,看起来很可疑
  • 当你比较值时,你不应该忘记使用双'='你是一个程序员。你也可以在测试时忘记使用"!"non-equality。

-mojuba


接受回答:

啊,是的,"尤达条件" ("If 0值是,执行此代码必须!")。我总是指着谁声称他们"更擅长"使用诸如皮棉(1)。这个特殊的问题70年代末就破了。大多数现代语言甚至不能编译这是因为他们拒绝强迫布尔值赋值的结果。

就像其他人说的,它肯定是不是问题,但确实会引起有点认知失调

tmn

我更喜欢使用for nsstring…

([x isEqualToString:@"x"]) 

或c字符串

strcmp(str1,str2);

这两种情况之间没有区别,除了内部的一些东西。这就像你手里拿着两件东西,一只手拿一个,然后比较它们,然后根据它们在. ...中是哪只手这不是一个因素。