给定以下代码:
#include <iostream>
using namespace std;
template<typename T> void Print(T t) {
cout << t << endl;
}
template<> void Print<int>(int t) {
cout << "int = " << t << endl;
}
void Print(int i) {
cout << "int2 = " << i << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
Print(1.3);
Print("tese");
Print(2);
char c;
cin >> c;
return 0;
}
为什么调用 Print(2) 没有歧义,而是调用 void Print(int i) ?
ps: 使用 bcc64.exe 和 cl.exe 测试。
最佳答案
标准的第 13.3.3 节,关于为重载选择最佳函数,明确指出如果在具有完全相同参数列表的模板函数和非模板函数之间进行选择,则非模板函数始终是比模板化的更适合。
关于C++重载优先于特化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23244665/