这个程序哪里错了?

Source_Code 2005-02-21 01:34:54
#include "stdafx.h"
using namespace std;

template<typename T>
T Max(T a,T b){return a>=b?a:b;}
template<typename T>
T *Max(T *a,T *b){return *a>=*b? a:b;}
template<>
char *Max(char *a,char *b)
{return strcmp(a,b)>=0?a:b;}


//char *Max(char *a,char *b){return strcmp(a,b)>=0?a:b;}

void main()
{double d3=3.3,d5=5.5;
cout<<Max(3,5)<<' '<<*Max(&d5,&d3)<<endl;
cout<<Max("ABC","ABD")<<endl;
cout<<Max("ABD","ABC")<<endl;
system("pause");
}

教程上说应该输出
5 5.5
ABD
ABD
而我用VS.NET 2003编译后输出的是
5 5.5
ABC
ABD
why?
...全文
135 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengwei1984222 2005-02-22
  • 打赏
  • 举报
回复
再加上一个特化版本试试
template<>
const char *Max(const char *a,const char *b)
{return strcmp(a,b)>=0?a:b;}
zhengwei1984222 2005-02-22
  • 打赏
  • 举报
回复
Max("ABC","ABD"),字面常量是const char *const 型的,所以调用的是
template<typename T>
T *Max(T *a,T *b){return *a>=*b? a:b;}
的参数演绎后的const char * Max(const char *a,const char *b);
而特化版本是
template<>
char *Max(char *a,char *b)
{return strcmp(a,b)>=0?a:b;}

const char *是不能转成char *的
Source_Code 2005-02-21
  • 打赏
  • 举报
回复
还有个问题!d3=3.3可是在变量监视窗口里看到的确是d3=3.2999999999999998double
Source_Code 2005-02-21
  • 打赏
  • 举报
回复
怎样才能叫他输出正确呢?
lw1a2 2005-02-21
  • 打赏
  • 举报
回复
两个文字常量的比较,结果似乎是未定义的
lw1a2 2005-02-21
  • 打赏
  • 举报
回复
我测试了一下,发现
cout<<Max("ABC","ABD")<<endl;
cout<<Max("ABD","ABC")<<endl;
这两个都是用的
template<typename T>
T Max(T a,T b){return a>=b?a:b;}

同意:junnyfeng(风歌·极品混混) 的
mikej8888 2005-02-21
  • 打赏
  • 举报
回复
你用其他编译器再运行看看 !!
darkstar21cn 2005-02-21
  • 打赏
  • 举报
回复
template<typename T>
T *Max(T *a,T *b){return *a>=*b? a:b;}
因为它在
Max(&d5,&d3)
Max("ABC","ABD")
Max("ABD","ABC")
用的都是
template<typename T>
T *Max(T *a,T *b){return *a>=*b? a:b;}
xiyi168 2005-02-21
  • 打赏
  • 举报
回复
template<typename T>
T *Max(T *a,T *b){return *a>=*b? a:b;}

这里错了 return *a>=*b? a:b;

比较的只是第一个字母
可以这样看看

template<typename T>
T *Max(T *a,T *b){
T aa = *a;
T bb = *b;
return *a>=*b? a:b;
}
junnyfeng 2005-02-21
  • 打赏
  • 举报
回复
这样吧:

char *a="ABC", *b="ABD";

然后比较的时候用a和b去比较

64,676

社区成员

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

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