c++ - 将字符串对象与 C++ 中的字符串文字进行比较 : why no compile errors?

标签 c++ string compiler-errors

我写了一些这样的代码:

#include<string>  
using namespace std;  
int main() {  
    string str;
    ...
    if(str=="test")    //valid????
        //do something
    ...
    return 0;
}

后来重新看代码我很好奇编译器怎么没报错?
注意:我已经检查了引用资料,看起来应该存在某种类型不匹配错误(将字符串对象与 char 数组进行比较)

编辑:对于 = 到 == 的拼写错误感到抱歉。已经修复了

编辑 2:问题:

  • 没有任何 operator==(string,char*) 或 operator==(string,char[]) 或定义在 引用资料(cppreference.com)
  • 无转换运算符 char* 或 char[] 到字符串

最佳答案

正如其他人提到的,单个 = 符号执行赋值,而不是比较。

但是比较运算符像赋值一样由operator overloading定义,C++ 最重要的特性之一。

表达式str = "test"转化为函数调用str.operator=("test"),表达式str == "test" 将转换为 str.operator== ("test")operator==(str,"test"),以两者为准有效。

即使未为 std::stringchar * 的操作数定义重载函数,编译器仍会尝试找到要转换的函数匹配此类函数的类型的参数。

编辑: 哈,std::string 不能转换为 bool 所以 if 条件仍然会是一个错误。我认为这是为问题制作一个很好的片段的产物。

关于c++ - 将字符串对象与 C++ 中的字符串文字进行比较 : why no compile errors?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15063906/

相关文章:

java - 如何在 java 中用零填充字符串?

Python 从具有奇怪编码的文件中读取字符串

c# - C#程序无法正常工作,控制台输出为空白

c++ - cin.fail()的错误处理问题

c++ - map operator[] 的返回值(和 "at"方法)

c++ - 如何设置.vcxproj以让MSBuild编译dll

c++ - 在 C++ 中将字符串拆分为数组

正则表达式提取与 R 中某些单词匹配的部分字符串

c++ - 像这样传递 Const 时出错

java - 如何解决 .java 文件中的 java.lang.RuntimeException : Stub! 错误?