重载与函数模板问题

[复制链接]
1649|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

粉丝
快速回复 在线客服 返回列表 返回顶部