arguments 模板函数中的常量

arguments a constant in template function

我有一个如下所示的模板函数,其中一个参数是常量

template<typename T>
T maxAmong( T x, const T y) {
    return x ;
}

对于显式专业化,我希望有以下代码。但这会产生编译错误。

template<>   char* maxAmong(  char* x, const char* y) {
    return x;
}

而使 return 类型和两个参数都为常量有效

template<>  const char* maxAmong( const char* x, const char* y) {
    return x;
}

为什么第二个片段中的代码会失败,因为对我来说代码看起来更正确。

const char * 是指向 const char.

的指针

char * const 是指向 char.

的常量指针

因此,您的模板专业化应如下所示 this:

template<typename T>
T maxAmong( T x, const T y) {
    return x ;
}

template<> 
char* maxAmong( char* x,  char* const y) {
    return x;
}

这个帖子也可能有帮助。

What is the difference between char * const and const char *?