编译器不会为函数模板生成目标代码,在调用一个函数模板时,虽然用的是模板名,但实际上被调用的并不是抽象的函数模板,而是由函数模板生成的实例函数。
例:
int a;
outputArray(a, A_COUNT);
这里虽然没有明确的给出模板参数,但实际上被调用的是函数模板的实例outputArray<int>,之所以不需要像引用类模板实例时那样明确的指定函数模板参数,是因为编译器可以根据函数调用的实参类型自动推导出函数模板的参数。
当然,显示的指定函数模板的参数也是被允许的,例:
outputArray<int>(a, A_COUNT);
调用函数模板时的模板参数在多数情况下都可以省去,但在通过函数实参类型无法推断出模板参数类型时,必须显式的指定。