请考虑以下代码段:
#include <iostream>
int main() {
std::string str = "Hello";
const char *cstr = "Hello";
if (cstr == str) {
std::cout<<"Both are same string.";
}
return 0;
}
我很难猜测const char *和字符串比较是如何工作的:
if (cstr == str) {
根据我的理解,使用 str 作为参数调用左操作数的重载运算符(在本例中为 cstr ) . 现在没有为const char *重载 == . 那么上述比较如何起作用呢?
如果比较是 str==cstr ,我就没有接受它的问题(因为==对于std :: string重载并且它接受const char *作为参数进行比较) .
注意: - 我正在使用gcc-4.8.1来编译上面的代码 .
2 回答
运算符实际上是std :: string,在概念上看起来与此类似:
(尽管事实上它是模板化的) .
std :: string的这个运算符是专门为你提到的操作添加的(比较std :: string和char *,当char *作为比较中的左侧操作数提供时) .
两者都存在(特别是为了支持这种情况) .
来自http://en.cppreference.com/w/cpp/string/basic_string/operator_cmp .
比较basic_string对象和以null结尾的T数组
...