请考虑以下代码段:
#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编译上面的代码。
答案 0 :(得分:3)
来自http://en.cppreference.com/w/cpp/string/basic_string/operator_cmp。
比较basic_string对象和以空值终止的T
数组template< class CharT, class traits, class Alloc >
bool operator==(const CharT* lhs, const basic_string<CharT,Traits,Alloc>& rhs);
template< class CharT, class traits, class Alloc >
bool operator==(const basic_string<CharT,Traits,Alloc>& lhs, const CharT* rhs);
...
答案 1 :(得分:2)
根据我的理解,使用str作为参数调用左操作数的重载运算符(在本例中为cstr)。现在没有为const char *重写==。
运算符实际上是std :: string,概念上看起来与此类似:
bool operator==(const char* const lhs, const std::string& rhs);
(尽管事实上它是模板化的。)
这个std :: string运算符是专门为你提到的操作添加的(比较std :: string和char *,当比较时提供char *作为左侧操作数)。 / p>
如果比较是str == cstr,我就没有接受它的问题(因为==对于std :: string重载并且它接受const char *作为参数进行比较)。
两者都存在(特别是为了支持这种情况)。