如果这样写:程序运行结果是过的
#include<iostream>
#include<string.h>
#include<string>
using namespace std;
namespace Myfunc{
template<class T>
T min(const T&t1,const T&t2)
{
return t1<t2?t1:t2;
}
template<>
const char* min<char*>(const char* const&str1,
const char* const&str2)
{
int res=strcmp(str1,str2);
cout<<"res :"<<res<<endl;
return (res<0?str1:str2);
}
}
int main()
{
int i1=2,i3=3;
cout<<Myfunc::min(i1,i3)<<endl;
double d1=2.0,d2=1.0;
cout<<Myfunc::min(d1,d2)<<endl;
char c1='2',c2='3';
cout<<Myfunc::min(c1,c2)<<endl;
string s1="101",s2="10";
cout<<Myfunc::min(s1,s2)<<endl;
char *a1="101",*a2="413";
cout<<Myfunc::min(a1,a2)<<endl;//这个结果有错误
return 0;
}
最后一个输出413。
当把程序中的所有const去掉时正确,不知道为什?求解
namespace Myfunc{
template<class T>
T min(T&t1,T&t2)
{
return t1<t2?t1:t2;
}
template<>
char* min<char*>( char* &str1,
char* &str2)
{
int res=strcmp(str1,str2);
cout<<"res :"<<res<<endl;
return (res<0?str1:str2);
}
}
#include<iostream>
#include<string.h>
#include<string>
using namespace std;
namespace Myfunc{
template<class T>
const T min(const T&t1,const T&t2)
{
return t1<t2?t1:t2;
}
template<>
const char* min<char*>(const char* &str1,
const char* &str2)
{
int res=strcmp(str1,str2);
cout<<"res :"<<res<<endl;
return (res<0?str1:str2);
}
}
int main()
{
int i1=2,i3=3;
cout<<Myfunc::min(i1,i3)<<endl;
double d1=2.0,d2=1.0;
cout<<Myfunc::min(d1,d2)<<endl;
char c1='2',c2='3';
cout<<Myfunc::min(c1,c2)<<endl;
string s1="101",s2="10";
cout<<Myfunc::min(s1,s2)<<endl;
char *a1="101",*a2="413";
cout<<Myfunc::min(a1,a2)<<endl;//这个结果有错误
return 0;
}
namespace Myfunc{
template<class T>
const T& min(const T& t1,const T& t2)
{
return t1 < t2 ? t1 : t2;
}
template<>
const char* const & min<const char*>(const char* const &str1,
const char* const &str2)//const char* 表示char*对象是常量;char* const 表示char*指针是常量。
{
int res=strcmp(str1,str2);
cout<<"res :"<<res<<endl;
return (res<0?str1:str2);
}
template<>
char* const & min<char*>(char* const &str1, char* const &str2)
{
int res=strcmp(str1,str2);
cout<<"res :"<<res<<endl;
return (res<0?str1:str2);
}
}