昨天遇到个很搞笑的问题
先贴代码
#include<iostream>
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
using namespace std;
int a = 9, b = 8;
cout << "before swap:" << endl;
cout << a << '\t' << b << endl;
swap(a, b);
cout << "after swap:" << endl;
cout << a << '\t' << b << endl;
cin.get();
return 0;
}
熟悉c
语言的同学,一言就能发现,swap(a,b)
???这样写肯定错的啊!
但是这个程序不仅编译没报错,运行结果也是对的,为什么呢?正如标题这就是使用using namespace std
的陷阱之一,main函数里调用的不是自己的写那void swap(int *a,int *b)
而是std::swap()
。
运行结果:
有兴趣的同学可以把自己写的swap()函数改个名字并且调用自己写的函数,那么编译就不能通过了。