我无法为我的问题提出更好的标题。基本上它恢复到以下代码:
#include <iostream>
template<typename T> // generic
void f(T)
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
template<typename T>
void f(int)
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
int main()
{
f(42); // calls generic f(T)
f<int>(42); // calls f(int)
f<int>(42.2); // also calls f(int)
}
我的问题:
f(42)
会调用泛型f(T)
,但为什么f<int>(42)
和f<int>(42.2)
会导致调用第二个重载?答案 0 :(得分:2)
是。只是T不能从论证中推断出来。没关系,因为你在(2)和(3)中提供了一个模板参数。
如果您在调用T时未指定T,它将选择推导的版本(1)(示例1)。如果您在呼叫站点指定T,它将不会尝试推断T,因为您已经告诉它T是什么(示例2和3)。