我有以下代碼:模板超載加上指針的指針
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」。在這種情況下,編譯器如何選擇要調用的函數?謝謝!