是 <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*& t\n";
}
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) {
// ...
}
关于c++ - 函数模板特化类型——它是可选的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38803903/