函数模板专用化类型-它是可选的吗

Function template specialization type - is it optional?

本文关键字:专用 类型 函数模板      更新时间:2023-10-16

以下代码中的<const char*>是可选的吗?我发现g++和clang在没有它的情况下编译很好。

template<typename T>
void debugRep2(T const& t) {
  std::cout << "debugRep(const T& t)n";
}
template<>
void debugRep2<const char*>(const char* const& t) {
            //^^^^^^^^^^^^^
  std::cout << "const char*& tn";
}
int main() {
  int n;
  int *pn = &n;
  debugRep2(n);
  debugRep2(pn);
}

模板化类型已经在函数参数中指定,并且可以由编译器推导

template<>
void debugRep2<const char*>(const char* const& t) {
                         // ^^^^^^^^^^^ already present
    // ...
}

所以是的,在这种情况下,它是可选的。


事实上,写这种专业化的常用方法是

template<>
void debugRep2(const char* const& t) {
    // ...
}