我写了一些这样的代码:
#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::string
和 char *
的操作数定义重载函数,编译器仍会尝试找到要转换的函数匹配此类函数的类型的参数。
编辑: 哈,std::string
不能转换为 bool
所以 if
条件仍然会是一个错误。我认为这是为问题制作一个很好的片段的产物。
关于c++ - 将字符串对象与 C++ 中的字符串文字进行比较 : why no compile errors?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15063906/