C++模板函数选择

标签 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 被调用。为什么?

最佳答案

如果要显式显示模板参数,您将使用:

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

调用第一个函数。

你会使用:

foo<int>(a, b);

调用第二个函数。

既然你让编译器选择函数,它就选择了限制性更强的函数,也就是第二个。

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

关于C++模板函数选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481491/

相关文章:

c++ - 在 C++ 中查找 char* 数组中的 char* 元素

c++ - 在 C++ 中将模板与类一起使用时,类成员函数的错误答案?

c++ - 无论常量如何,函数都采用指向方法的指针

双重嵌套模板类中的 c++ static int def 因 clang++ 和 g++ 而失败

c++ - VC++创建Cdialog类断言错误

c++ - 在无法应用omp atomic/reduction的情况下,使用omp critical我们可以做些什么来提高效率呢?

c++ - 写入二进制文件的 vector 数据在读回另一个 vector 时不一样,为什么?

c++ - Gstreamer H264 管道滞后

templates - MarkLogic 中的 XQuery 模板不显示任何值,只显示属性 (TDE)

C++ - 如何键入别名、typedef 或包装 boost::variant?