<分区>
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 被调用。为什么?
<分区>
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 被调用。为什么?
最佳答案
如果要显式显示模板参数,您将使用:
foo<int, int>(a, b);
调用第一个函数。
你会使用:
foo<int>(a, b);
调用第二个函数。
既然你让编译器选择函数,它就选择了限制性更强的函数,也就是第二个。
为什么第二个更严格?编译器必须推断出一种类型才能使用第二个函数。它必须推导出两种类型才能使用第一种。
关于C++模板函数选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481491/