【发布时间】:2015-03-29 01:51:19
【问题描述】:
#include <iostream>
using namespace std;
template<typename T>
void func(T t) { std::cout << "matched template\n"; }
void func(long x) { std::cout << "matched long\n"; }
int main()
{
func(0);
}
输出:
matched template
在其他情况下,当重载解析可能不明确时,首选非模板函数,为什么这个不同?
【问题讨论】:
-
0是int,而不是long。模板函数可以提供分辨率而无需转换。我猜:) -
FWIW,我最近又看了STL's overload resolution video,忘了它有多好。
-
这是在询问规则为何如此的原因,还是只是来自说明规则的标准的信息?
-
“当重载决议可能不明确时,首选非模板函数” - 当然。但
void f(int); void f(long); f(0);中没有任何含糊之处。 -
@NeilKirk 都很棒:)
标签: c++ templates overload-resolution