template<class T>
void fn(T t){}
template<class T>
void fn(std::vector<T> vt){}
void f() {
std::vector<int> vt;
fn(vt);
}
我知道会调用第二个模板函数,但我不知道模板函数匹配的规则。
部分排序发生在调用函数模板专用化的重载解析中。
非正式地说,"A 比 B 更专业"意味着"A 接受的类型比 B 少"。
对于这种情况,第 2fn
更专业,并且在重载解析方面胜出,因为它
std::vector
实例化类型少于第 1 个实例化类型,而第 1 个实例化可以接受所有类型。