【发布时间】:2014-01-31 16:05:46
【问题描述】:
我有以下代码:
void A(const int*)
{
cout << "const int*" << endl;
}
void A(const int&)
{
cout << "const int&" << endl;
}
template <typename T>
void B(const T*)
{
cout << "const T*" << endl;
}
template <typename T>
void B(const T&)
{
cout << "const T&" << endl;
}
int main()
{
int* a = nullptr;
A(a); //output: const int*
int* b = nullptr;
B(b); //output: const T&
return 0;
}
A(a) 正在调用函数 A(const int*) B(b) 正在调用模板函数 B(const T&)
由于重载解析的工作方式,我对模板行为并不感到惊讶。但我无法解释为什么非模板函数返回相反的结果(这更直观)。
是不是因为使用非模板函数不需要推导类型并被认为是完全匹配(允许添加 const-ness?)?
我不是元编程和编译器正在做的事情(如重载解析)方面的专家,这就是我有点困惑的原因。
【问题讨论】:
标签: c++ function templates overloading overload-resolution