我有以下代码:模板超载加上指针的指针
template<class A, class B>
void test(A& a, const B* b)
{ std::cout << "hi" << std::endl; }
template<class A, class B>
void test(A& a, const B** b)
{ std::cout << "hello" << std::endl; }
class TestClass
{};
int main()
{
int a = 5;
TestClass b;
TestClass* c = &b;
test(a, &c);
return 0;
}
不知怎的,输出是“喜”虽然看上去更好的匹配将是第二个模板功能。当我删除const
s作为B*
和B**
的限定符时,我会得到对应于第二个模板函数的“hello”。在这种情况下,编译器如何选择要调用的函数?谢谢!