今天,刚加入一个群,原本以为自己c++水平还不错的我,遇到了一个群里的提问,却只能愣在一边,这个问题如下:
#include<iostream>
#include<string>
using namespace std;
template<typename T>
void swap(T&a,T&b){
T temp=a;a=b;b=temp;
}
int main(){
double dx=3.5,dy=5.6;
int ix=6,iy=7,ia=303,ib=505;
string s1="good",s2="better";
cout<<"double dx="<<dx<<", dy="<<dy<<"/n";
cout<<"int ix="<<ix<<", iy="<<iy<<"/n";
cout<<"string s1=/""<<s1<<"/", s2="<<s2<<"/n";
swap(dx,dy);
swap(ix,iy);
swap(s1,s2);
swap(ia,ib);
cout<<"/nafter swap:/n";
cout<<"double dx="<<dx<<", dy="<<dy<<"/n";
cout<<"int ix="<<ix<<", iy="<<iy<<"/n";
cout<<"string s1=/""<<s1<<"/", s2=/""<<s2<<"/"/n";
return 0;
}
这里首先是风格的问题,都说可读性太差,模块话不强,可是我开始觉得自己以前也是这么写的,也许真的自己的代码量还是太少了,所以感觉太差了。以后会更加努力的。
第二,也是首要的程序问题,意识到本身模板函数没问题,可就是不知问题出在哪了.
很是郁闷。后来经过点拨,才意识到,本程序的swap和string(string.h里string类的swap函数)头文件里的函数重名了,所以swap函数出现二义性,一般是将自己的函数名改一下,就可以通过了。
这么简单的问题,自己就没检查出来,实在汗啊!以后要加强编码啊!
改后的代码如下:
#include<iostream>
#include<string>
using namespace std;
int main(){
double dx=3.5,dy=5.6;
int ix=6,iy=7,ia=303,ib=505;
string s1="good";
string s2="better";
cout<<"double dx=" << dx << ", dy=" << dy << "/n";
cout<<"int ix=" << ix << ", iy=" << iy << "/n";
cout<<"string s1=/""<< s1<< "/", s2=" << s2 << "/n";
MySwap(dx,dy);
MySwap(ix,iy);
MySwap(s1,s2);
MySwap(ia,ib);
cout<<"/nafter swap:/n";
cout<<"double dx=" << dx << ", dy=" << dy << "/n";
cout<<"int ix=" << ix << ", iy=" << iy << "/n";
cout<<"string s1=/""<< s1<< "/", s2=" << s2 << "/n";
return 0;
}
template<typename T>
void MySwap(T &left, T &right){
T temp = left;
left = right;
right = temp;
}