打印

重载与函数模板问题

[复制链接]
708|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
baidudz|  楼主 | 2012-6-18 22:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定义一个函数模板:
template<typename T> int compare(T, T)
{
……
}
再定义一个普通函数
int compare(const char *, const char *)
{
……
}

int main()
{
const char ch_arr1[] = "world", ch_arr2[] = "hi";
const char *p1 = ch_arr1, *p2 = ch_arr2;

compare(ch_arr1, ch_arr2);
compare(p1, p2);


return 0;
}

红色部分的两个compare函数调用的都是普通函数,C++ primer的解释是,在上述两种情况下,普通函数和函数模板都完全匹配。像通常一样,当匹配良好时,非模板版本优先。实际在vs2010运行结果与书上一致。

我的疑问是:compare(p1, p2)确实完全匹配,调用非模板版本正常,但是compare(ch_arr1, ch_arr2)调用非模板版本时,需要将数组ch_arr1和ch_arr2转化成指针,而函数模板才是完全匹配,那不应该调用函数模板吗?请大家指教,难道对普通函数而言,数组到指针的转化可以忽略不计?我知道对模板匹配的时候不可以忽略的,看C++primer刚碰到这个问题,苦恼不已,谢谢。

相关帖子

沙发
火箭球迷| | 2012-6-18 23:01 | 只看该作者
为什么要转化为指针。ch_arr1\ch_arr2就是指针。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

239

主题

2284

帖子

0

粉丝