先看例子
template <typename T>
int compare(const T& v1,const T& v2)
{
if(v1 < v2) return 1;
else if ( v1 == v2 ) return 0;
else return -1;
}
//test code
int main()
{
short s = 3;
std::cout<<compare(3,4)<<std::endl;
//std::cout<<compare(s,4)<<std::endl; //error
std::cout<<compare<int>(s,4)<<std::endl;
return 0;
}
实参推断:从函数实参确定模板实参的类型和值的过程叫做模板实参推断
第一次调用compare ,发生了函数模板的实参推断:
compare(3,4)
3 推断出 T 为int 型
4 推断出T为int 型
故编译器实例化一个T 为int 的特定compare 版本
第二个调用会报错
compare(s,4)
从s 推断出T 为short
4 推断出T 为int
两个实参推断的结果不一致,所以会报错
使用函数模板显示实参&#x