在int的情况下交换失败并且在字符串的情况下工作

时间:2011-06-01 16:35:24

标签: c++ swap

#include <iostream>
#include <string>
#include <algorithm>    
int main()
{
 std::string str1 = "good", str2 = "luck";
 swap(str1,str2); /*Line A*/
 int x = 5, y= 3;
 swap(x,y); /*Line B*/
}

如果我评论B行代码编译(http://www.ideone.com/hbHwf),而评论A行代码无法编译(http://www.ideone.com/odHka),我得到了以下错误:

error: ‘swap’ was not declared in this scope

为什么我在第一种情况下没有收到任何错误?

4 个答案:

答案 0 :(得分:7)

swap(str1, str2)Argument dependent lookup

而有效

P.S:Pitfalls of ADL

答案 1 :(得分:3)

您没有资格swap;由于ADL传递std::string个对象时它有效,但由于int不在std命名空间中,您必须完全限定该调用:

std::swap(x, y);

或使用使用声明:

using std::swap;
swap(x, y);

答案 2 :(得分:2)

字符串位于std :: namespace中,因此编译器会在那里查找字符串的swap()。整数不是,所以它没有。你想要:

std::swap(x,y);

答案 3 :(得分:1)

在这两种情况下,您应该使用std::swap()而不是swap()