swap 与Swap的故事

  这是我的第一篇博客,也是有点小激动,记录下刚碰到的一个小问题。

  我在写函数模板swap()想练习下template<class T>的使用;我的代码如下:   

#include <iostream>
using namespace std;
template<class T>
void swap(T &a,T &b)
{
cout << " 交换前:" << endl;
cout << a << " " << b << endl;


T c ;
c = a;
a = b;
b = c;


cout << " 交换后:" << endl;
cout << a << " " << b << endl;
}


int main()
{
int a = 3, b = 7;
swap(a,b);

double da = 3.0, db = 7.0;
swap(da,db);

}

  

  编译报错

  call of overloaded 'swap(int&, int&)' is ambiguous swap(a,b);

  我检查了好几遍都没什么逻辑错误 也不知道有什么语法错误 真的是头大了; 

  在网上搜到一个和我几乎一模一样的代码  

#include <iostream>
using namespace std;
template<class T>
void Swap(T & x, T & y)
{
T tmp = x;
x = y;
y = tmp;
}
int main()
{
int n = 1, m = 2;
Swap(n, m); //编译器自动生成 void Swap (int &, int &)函数
cout << n << " " << m << endl;
double f = 1.2, g = 2.3;
Swap(f, g); //编译器自动生成 void Swap (double &, double &)函数
return 0;
}

奇怪了,为什么人家的就没啥错误呢,就运行得很好呢。

我仔细比较了到底有啥区别,难道就只是别人的是Swap, 我的是swap吗? 就抱着试一试的态度,把我的小写s,换成了大写S,编译,惊呆了,居然编译通过了。

后来查了下才知道是和标准库的std::swap同名了,所以出现错误。

不禁让人感叹,再简单的程序,没有把它变成代码输出来,就感受不到它的真实的情况,在编程的时候会遇到各种各样出乎自己预料的问题,程序员都要动手把代码敲出来吧。

 

  

猜你喜欢

转载自www.cnblogs.com/jianghuxiao/p/10498771.html