【问题标题】:arguments a constant in template function参数模板函数中的常量
【发布时间】: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&lt;&gt; char* maxAmong( char* x, char* const y) { 这是常量指针。你有指向常量的指针,这是一个区别。
  • 在专业化中,我期望类型 T 是 char*。因此,第一个参数和返回类型为 char*,第二个参数为 const char*(类型为 T 的 const,如原始模板定义中一样)。
  • 第二个参数实际上是char* const 而不是const char*

标签: c++ templates constants


【解决方案1】:

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 *?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 2011-05-27
    • 2013-04-12
    相关资源
    最近更新 更多