2011-05-01 91 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