【发布时间】:2017-06-10 10:24:11
【问题描述】:
这是我的函数模板
template<class T> const T& min(const T& a, const T& b) {
return (a < b) ? a : b;
}
函数的唯一目的是返回两个参数的最小值。参数是只读的..
这里是 char* 参数的显式特化
//Code 1:
template<>
const char*& min<const char*>(const char* &a,
const char* &b) {
return (strcmp(a, b) < 0) ? a : b;
}
即使有只读参数,此代码也会出错。虽然下面的代码完美运行
//Code 2:
template<>
const char* const& min<const char*>(const char* const& a,
const char* const& b) {
return (strcmp(a, b) < 0) ? a : b;
}
如果单独使用 & 或 const 就足够了,为什么我必须在 char* 之后提供 const&参数只读。 Code 2..中的const&是什么意思??
已编辑:
我在使用代码 1 编译时收到此错误代码..
error: template-id 'min<const char*>' for 'const char* const& min(const char*&, const char*&)' does not match any template declaration|
虽然使用 Code 2 编译没有错误代码..
【问题讨论】:
-
看这里(c,但答案在这里有效):stackoverflow.com/questions/890535/…
-
您已将模板参数声明为参考 (
T&)。那么你为什么想知道你必须在专业化中保持这样的状态呢?你能详细说明你的疑问吗? -
是的,但是为什么要使用 const& 当你可以单独使用 'const' 或 'reference operator (&)' 来确保指针总是指向同一个地址时......
-
@abhi_awake "或者单独的'引用运算符 (&)'" 咦,什么??
-
const char* &是对const char*的非常量引用,而不是对char*的常量引用。它不是const T&的特化。 (并且您对返回值和参数使用不同的类型。)