c++ - 为什么 ("Maya"== "Maya") 在 C++ 中不是真的?

标签 c++ string equality

知道为什么我会因为这段代码而得到“Maya 不是 Maya”吗?

if ("Maya" == "Maya") 
   printf("Maya is Maya \n");
else
   printf("Maya is not Maya \n");

最佳答案

因为您实际上是在比较两个指针 - 使用例如改为以下之一:

if (std::string("Maya") == "Maya") { /* ... */ } 
if (std::strcmp("Maya", "Maya") == 0) { /* ... */ }

这是因为 C++03,§2.13.4 说:

An ordinary string literal has type “array of n const char

...在您的情况下,适用于指针的转换。

另见 this question在这种情况下,为什么不能为 == 提供重载。

关于c++ - 为什么 ("Maya"== "Maya") 在 C++ 中不是真的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3303164/

相关文章:

python - 将列表与列进行匹配并从列中提取匹配值

java - 查看索引是否为负数

c# - 对简单类型使用结构而不是类

c++ - c_str == string 与 c_str == c_str 的值相等

c++ - 如何在基类中调用 "move" '&&' 构造函数?在 C++ 中

c++ - 我如何在 Qt 中的小部件下绘制阴影?

java - 验证字符串格式(模式)输入

Javascript 比较表达式

c++ - 为什么fstream不利用operator>>的istream原型(prototype)?

c++ - VC++中如何判断链接是否存在?