C ++模板函数选择

时间:2014-05-05 20:43:07

标签: c++ templates

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。为什么呢?

1 个答案:

答案 0 :(得分:1)

如果要明确模板参数,可以使用:

foo<int, int>(a, b);

调用第一个函数。

你会使用:

foo<int>(a, b);

调用第二个函数。

由于您让编译器选择了该函数,因此它选择了更具限制性的函数,这是第二个函数。

为什么第二个限制性更强?编译器必须推导出一种类型才能使用第二种函数。它必须推导出两种类型才能使用第一种类型。