读C++ template的一个简单问题

AuroraExcuse 2008-03-04 01:43:45
本人最近开始学习《C++ template,第二章中的例子
template <typename T>
inline const T & _max (const T & a,const T & b)..........................@1
{
return (a<b)?b:a;
}

inline const char * _max(const char *a, const char * b)...................@2
{
return strcmp(a,b)<0?b:a;
}

template <typename T> ....................................................@3
inline const T & _max (const T & a, const T &b, const T &c)
{
return _max(_max(a,b),c);
}

int _tmain(int argc, _TCHAR* argv[])
{
char * a = "abc";
char * b = "def";
char * c = "ghi";
char * r = _max(a,b,c);
return 0;
}
单步跟踪以后调用次序为@3---->@1------>@1 ,请问这个现象如何解释。

...全文
72 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
baihacker 2008-03-04
  • 打赏
  • 举报
回复
前面没有说的
max3中以char*为参数去寻找匹配
首先看到的是普通函数ax2,所需要的参数为const char*不匹配
于是在模板中匹配了...
否则,你把模板改了,让模板无法匹配,这时只有2,3
就报错鸟
hxxwcc 2008-03-04
  • 打赏
  • 举报
回复
6楼正解
hxxwcc 2008-03-04
  • 打赏
  • 举报
回复
4楼说的模板偏特化过不了编译
星羽 2008-03-04
  • 打赏
  • 举报
回复

匹配问题
你把2改成这样看看

inline char * _max(char *a, char * b)//...................@2
{

return strcmp(a,b) <0?b:a;
}

NKLoveRene 2008-03-04
  • 打赏
  • 举报
回复
一般匹配同样好的时候,非模板的函数优先匹配
规则是这样的,所以如果实现时不是这样的,那就应该是3楼所说的编译器实现的问题了
abomber2 2008-03-04
  • 打赏
  • 举报
回复
inline const char * _max(const char *a, const char * b)...................@2
{
return strcmp(a,b) <0?b:a;
}

前面加上template <>

改成
template <>
inline const char * _max(const char *a, const char * b)...................@2
{
return strcmp(a,b) <0?b:a;
}


模板特化
taodm 2008-03-04
  • 打赏
  • 举报
回复
看<C++ Primer>关于函数重载解析的章节.
规则可以说极复杂,好多编译器都没实现对.
建议不要深究这个细节.
AuroraExcuse 2008-03-04
  • 打赏
  • 举报
回复
thx all the same , 补充一下,直观上当然是希望以@3 @2 @2 次序执行
lin_style 2008-03-04
  • 打赏
  • 举报
回复
不懂STL的飘过。。
帮顶。
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-04 01:43
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下