这里忽然想到一个问题:
template<typename T>
void foo()
{
T x = T();
}
template<typename T>
void foo2(T x)
{
++x;
}
template<typename T1, typename T2>
void foo3(T1 x)
{
}
int main(int, char**)
{
foo<int>(); // 正确
foo(); // 错误,是无法进行类型推导的
foo2(5); // 正确,可进行类型推导
foo3(5); // 错误,只能推导出类型T1
foo3<int>(5); // 错误,仍然无法推导出类型T2
foo3<int, double>(5); // 正确
return 0;
}
可见,无参的函数模板和类模板一样是无法进行类型推导的,函数模板的类型推导机制是通过参数匹配的形式进行类型推导的,