为什么要调用通用模板函数

Why call general template function?

本文关键字:函数 调用 为什么      更新时间:2023-10-16
#include <iostream>
using namespace std;
     template <typename T> void compare(const T&, const T&){
        cout<<"T"<<endl;
     }
     void compare(const char*, const char*){
        cout<<"const char*"<<endl;
     }
int main()
{
     char a[]="123";
     char b[]="123";
     char *p1 = a, *p2 = b;
     compare(p1,p2);
    return 0;
}

其结果是 :T

但为什么呢?实例化后,模板函数可能是这样:

compare(const char*&, const char*&(

和普通函数一样,普通函数应该被调用!

这就是为什么

我认为写T const&比写const T&更优越。

模板函数是用签名void(char* const&, char* const&)实例化的,这比void(char const*, char const*)匹配更好,因为它不需要将指针从char*转换为char const*

T被推导为char *,这给出了一个完全匹配。对于另一个重载,你不得不说,

 compare(static_cast<char const *>(p1), static_cast<char const *>(p2));

以使其更好地匹配。

(或者只是首先声明p1p2char const *

ab 分配给 const 不会使它们成为 const's,这可能是混淆的根源。如何声明它们是更重要的部分。我相信你需要像 Kerrek SB 所说的那样声明它们,才能得到你所追求的东西......