template<typename TA, typename TB>
void foo (TA a, TB b); // #1
template<typename T>
void foo (T a, T b); // #2
int a, b;
foo(a, b);
在这种情况下,调用foo#2。为什么呢?
答案 0 :(得分:1)
如果要明确模板参数,可以使用:
foo<int, int>(a, b);
调用第一个函数。
你会使用:
foo<int>(a, b);
调用第二个函数。
由于您让编译器选择了该函数,因此它选择了更具限制性的函数,这是第二个函数。
为什么第二个限制性更强?编译器必须推导出一种类型才能使用第二种函数。它必须推导出两种类型才能使用第一种类型。