swap函数
来源:互联网 发布:印度进出口数据2016 编辑:程序博客网 时间:2024/05/16 10:51
今天碰到一个奇怪的问题:
#include <iostream>
using namespace std;
int main()
{
void swap(int &,int &);
int i=3,j=5;
swap(i,j);
cout<<"i="<<i<<" "<<"j="<<j<<endl;
return 0;
}
void swap(int &a,int &b)
{int temp;
temp=a;
a=b;
b=temp;
}
vc6.0下,输出的是:
i=3,j=5
交换不了。
解决方案,
1.改函数名:
#include <iostream>
using namespace std;
int main()
{
void swapa(int &,int &);
int i=3,j=5;
swapa(i,j);
cout<<"i="<<i<<" "<<"j="<<j<<endl;
return 0;
}
void swapa(int &a,int &b)
{int temp;
temp=a;
a=b;
b=temp;
}
2.不用标准库,
#include <iostream.h>
int main()
{
void swap(int &,int &);
int i=3,j=5;
swap(i,j);
cout<<"i="<<i<<" "<<"j="<<j<<endl;
return 0;
}
void swap(int &a,int &b)
{int temp;
temp=a;
a=b;
b=temp;
}
3.不用命名空间
#include <iostream>
int main()
{
void swap(int &,int &);
int i=3,j=5;
swap(i,j);
std::cout<<"i="<<i<<" "<<"j="<<j<<std::endl;
return 0;
}
void swap(int &a,int &b)
{int temp;
temp=a;
a=b;
b=temp;
}
4.直接调用:
#include <iostream>
using namespace std;
int main()
{
int i=3,j=5;
swap(i,j);
cout<<"i="<<i<<" "<<"j="<<j<<endl;
return 0;
}
5.去掉函数声明。
#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
int main()
{
int a=11,b=5;
swap(a,b);
cout<<a<<" "<<b<<endl;
return 0;
}
问题:
出现上面问题,关键是跟c++标准库函数里面的swap函数冲突了。
就是存在std::swap
标准库的swap函数,跟上面自定义的swap函数(形参,返回值)一模一样的。因此编译器就出现问题了。
单步调试的结果是,翻译器跳过上面的 swap(i,j)语句。
通过单步调试第四个程序,找到std::swap的原型:
template<class _Ty> inline
void swap(_Ty& _X, _Ty& _Y)
{_Ty _Tmp = _X;
_X = _Y, _Y = _Tmp; }
启示:
不要直接用using namespace std;
这种方法,要用到的时候,才用std:: 这样。
例如,std::endl;等等。
避免出现上面问题。
- swap函数
- swap函数
- swap函数
- swap函数
- swap函数
- Swap函数
- swap函数
- swap函数
- swap函数
- swap函数
- swap函数
- swap函数
- 关于swap函数
- 内置swap函数
- 你会写几种swap函数?
- 关于swap函数
- swap()函数效率对比
- Java Swap函数
- 无备份恢复truncate掉的表
- 中国男篮今晚打的好难看 --- 危险
- Ubuntu安装Oracle 10G
- Gambit 命令之 dgui createitem (4)
- 找工作
- swap函数
- 备份一下输出流,免得久不用忘记掉
- 指针
- 指针(详解)
- 机房管理工程小结
- c++ 虚函数的实现机制
- 获得下拉列表选中项的值和文本
- HTML中设置超链接字体颜色和点击后的字体颜色的方法
- lucene基础