【发布时间】:2013-02-16 13:59:33
【问题描述】:
代码是这样的,它输出1:
int main(int argc, char *argv[])
{
vector <const char*> vec = {"nima","123"};
vector <const char*> vec2 = {"nima","123"};
auto result = equal(vec.cbegin(), vec.cend(), vec2.cbegin());
cout << result << endl;
return 0;
}
我知道只有使用strcmp 才能测试两个c 风格的字符串是否相等(因为char* 不是我理解的对象)。但这里equal 是来自<algorithm> 的函数。它是否重载了== 运算符,以便它可以测试两个char* 的相等性?
@Damon 说它们是相等的,因为我理解将相同的字符串文字合并到相同的地址。但是,当我尝试使用不同地址的char* 时,它仍然给了我相同的结果:
int main(int argc, char *argv[])
{
char* k = "123";
char* b = "123";
vector <const char*> vec = {"nima"};
vector <const char*> vec2 = {"nima"};
cout << &k << endl;
cout << &b << endl;
vec.push_back(k);
vec2.push_back(b);
auto result = equal(vec.cbegin(), vec.cend(), vec2.cbegin());
cout << result << endl;
return 0;
}
结果是:
0x7fff5f73b370
0x7fff5f73b368
1
【问题讨论】:
-
This demo 可能会让发生的事情更清楚。
-
关于您的编辑,请尝试动态分配
char字符串,您应该为每个字符串获得不同的地址,从而产生不同的结果。 -
@juanchopanza 我明白了,当我将其更改为
cout << (int*)k << (int*) b << endl;时,它们是相同的,谢谢!
标签: c++ string algorithm stl char