C++重载优先于特化?

标签 c++ templates overloading template-specialization overload-resolution

给定以下代码:

#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/

相关文章:

c++ - extern 模板不适用于 gcc?

c++ - 如何在可变参数/模板类构造函数中正确使用 std::forward

c++ - 从字符串到字符的转换 - C++

c++ - 动态与非动态类成员

c++ - __attribute__((format(printf, 1, 2))) 用于 MSVC?

c++ - C++中的函数重载与数字的数据类型

C++,重载 std::swap,编译器错误,VS 2010

c++ - 我可以从 signed char* 或 unsigned char* 中获取 char* 吗?

c++ - "Undefined reference to"声明具有双模板类的对象时出错

c++ - 在执行代码之前进入函数时引发异常