【发布时间】:2021-10-07 06:56:23
【问题描述】:
我有一个模板函数如下,其中一个参数是常量
template<typename T>
T maxAmong( T x, const T y) {
return x ;
}
对于明确的专业化,我希望有以下代码。但这会产生编译错误。
template<> char* maxAmong( char* x, const char* y) {
return x;
}
而将返回类型和两个参数都设为 const 有效
template<> const char* maxAmong( const char* x, const char* y) {
return x;
}
为什么第二个 sn-p 中的代码会失败,因为我的代码看起来更正确。
【问题讨论】:
-
template<> char* maxAmong( char* x, char* const y) {这是常量指针。你有指向常量的指针,这是一个区别。 -
在专业化中,我期望类型 T 是 char*。因此,第一个参数和返回类型为 char*,第二个参数为 const char*(类型为 T 的 const,如原始模板定义中一样)。
-
第二个参数实际上是
char* const而不是const char*。