众所周知C++的STL里面提供了string类,这很大的方便了我们对字符串的处理
而提到字符串就不得不提到字符串的比较,请看下面几段代码
std::string str1 = "我是一个字符串";
std::string str2 = "我是一个字符串";
char c_str1[100] = {"我是一个字符串"};
char c_str2[100] = {"我是一个字符串"};
cout << "str1 == str2:" << ((str1 == str2) ? "true" : "false") << endl;
cout << "str1 == c_str1:" << ((str1 == c_str1) ? "true" : "false") << endl;
cout << "c_str1 == c_str2:" << ((c_str1 == c_str2) ? "true" : "false") << endl;
先不急着看结果,先来想想最后的结果应该是什么?
下面来解释下
首先第一句应该都很好理解
str1 == str2
两个都是STL的string类,string重写了==运算符,相等比较很好理解
然后看第二句
str1 == c_str1
一个是STL的类,一个是char数组,这俩怎么比较?
相信熟悉C++的各位都想到了
既然运算符是个函数,那么就会有函数重载!
所以这个比较是调用了==运算符的重载函数
然后是最后一句
c_str1 == c_str2
这个就单纯的是C的东西了,比较的是两个数组的起始地址
所以如果代码改成这样
char c_str1[100] = {"我是一个字符串"};
char *c_str2 = c_str1;
cout << "c_str1 == c_str2:" << ((c_str1 == c_str2) ? "true" : "false") << endl;
那么最后的结果就是true了