重载template失败,原因?

ao168 2005-11-25 11:20:19
//非模板函数重载
const char* min(const char* ch1, const char* ch2,const char* ch3)
{
const char* temp;
int result1 = strcmp(ch1,ch2);
int result2 = strcmp(ch1,ch3);
int result3 = strcmp(ch2,ch1);
int result4 = strcmp(ch2,ch3);
if((result1<0)&&(result2<0)) { temp = ch1; }
else if((result3<0)&&(result4<0)) { temp=ch2; }
else { temp=ch3; }

cout<<"r1 = "<<result1<<",r2 = "<<result2<<",r3 = "<<result3<<", r4 = "<<result4<<endl;

return temp;
}

template <class T>
T min(T ii, T jj, T kk)
{
T temp;
if((ii<jj)&&(ii<kk)){ temp=ii; }
else if((jj<ii)&&(jj<kk)){ temp=jj; }
else { temp=kk; }
return temp;
}

int main(int argc, char* argv[])
{
cout<<min(100,20,30)<<endl;
cout<<min("Good Anderson","Washington","aGoogle Smith")<<endl;

return 0;
}
//结果应该返回: aGoogle Smith ,却返回了: Good Anderson
...全文
174 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
edrftgyh 2005-11-25
  • 打赏
  • 举报
回复
当有多个重载函数可用时,编译器会自动寻找他认为最适合的函数调用,在这里非模板函数显然是最适合的.应为没必要在生成一个函数的实例.
ao168 2005-11-25
  • 打赏
  • 举报
回复
问题是程序没有调用模板函数重载
const char* min(const char* ch1, const char* ch2,const char* ch3)
不知为什么
stanley_yue 2005-11-25
  • 打赏
  • 举报
回复
楼上的说法是对的。
提醒一点,cout<<min(100,20,30)<<endl;
这样的调用不好,最好还是先定义变量类型再调用变量。
wylove 2005-11-25
  • 打赏
  • 举报
回复
字符串比较不能用>和<,而应该用strcmp。举个例子:
"Good Anderson"<"aGoogle Smith"就为true。
ao168 2005-11-25
  • 打赏
  • 举报
回复
不好意思,是自己搞错了。
确实是应返回:Good Anderson的,
因为'a' = 97 , 而 'G' = 71
所以, "aGoogle Smith " > "Good Anderson "
ao168 2005-11-25
  • 打赏
  • 举报
回复
不好意思,是自己搞错了。
确实是应返回:Good Anderson的,
因为'a' = 97 , 而 'G' = 71
所以, "aGoogle Smith " < "Good Anderson "
guyanhun 2005-11-25
  • 打赏
  • 举报
回复
//结果应该返回: aGoogle Smith ,却返回了: Good Anderson

错了,a 转换成 整型 是 97 , G转换成 整型 是 71

所以, 返回的是 Good Anderson.
guyanhun 2005-11-25
  • 打赏
  • 举报
回复
它调用的是模板函数, xzgyb(老达摩) 正解
ao168 2005-11-25
  • 打赏
  • 举报
回复
不好意思,是自己搞错了。
确实是应返回:aGoogle Smith的,
因为'a' = 97 , 而 'G' = 71
所以,"aGoogle Smith" > "Good Anderson"
xzgyb 2005-11-25
  • 打赏
  • 举报
回复
"Good Anderson"
这些是char *类型
而你的
const char* min(const char* ch1, const char* ch2,const char* ch3)
存在限定修饰符转换
并不是最佳匹配函数

所以使用模版生成的

如果你去掉const,则将使用min

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧