C++中函数模板能够重载吗

来源:百度知道 编辑:UC知道 时间:2024/06/17 00:11:38
我试了一下,好像不能。。。

重载是完全可能,只是在有的时候会产生歧义,导致出错.

错误例子

EXP1:

template<class T>

T * fun(T *t)

{

return *t;

}

template<class T>

T fun(T t)

{

return t;

}

int main()

{
int a=5;

fun(a);

fun(&a);

return 0;

}

这种就运行同不过

原因是模板函数是以实参推断形参的类型,再来调用.

在上面主要错的是fun(&a),我们既可以把形参类型推断为int*

那么它可能去匹配T t,这里的T解释为int *

也可以推断为int类型 那么它会去匹配T *t,这里的T解释为int

所以2个方法都可能会调用,所以会产生歧义!

Exp2

template<class T>

T * fun(T *t)

{

return t;

}

template<class T>

T fun(T t1,T t2)

{

return t1+t2;

}

int main()

{
int a=6;

fun(a,5);

fun(&a);

return 0;

}

这个就