1
2
3
4
5
6
7
8
9
10
11
12
| template <class T>
T Min(T x, T y)
{
return x < y ? x : y;
}
int main()
{
unsigned ui = 0;
int a = Min(ui, 1);
return 0;
} |
这几行代码又有哪些错误呢?cl.exe提示说,error C2782: ‘T Min(T,T)’ : template parameter ‘T’ is ambiguous。在参数类型的确定上产生了不确定性,这是为什么呢?好吧,1会被解释成是int型的,但是我们平时不是经常把int直接传给unsigned类型的参数吗?可惜的是,此时的Min还不是一个函数,它只是一个模板而已,实例化之前尚不能完成参数的隐式转化(其实,我认为这只是编译器支持与否的问题)。同样,可以用显式特例化的方法来解决:
int a = Min(ui, 1); 或者 int a = Min(ui, 1);
当然,还可以强制类型转换:
int a = Min(ui, (unsigned)1); 或者 int a = Min(ui, 1);