模板函数中的引用类型转换?

时间:2016-08-03 08:36:39

标签: c++ templates

#include <iostream>
const char* max(const char* a, const char* b) {
    return strcmp(a,b) < 0 ? b : a;
}

template <typename T>
const T& max(const T& a, const T& b, const T& c) 
{
    return max(max(a,b),c);
}

int main()
{
    char* a = "abc";
    char* b = "cde";
    char* c = "def";
    const char* r = max(a,b);
    char* s = max(a,b,c);
    return 0;
}

无法编译:

  

max3a.cpp:9:12:错误:来自&#39; const char *&#39;的无效转换至   &#39;的char *&#39; [-fpermissive]

return max(max(a,b),c);

如果我将模板功能更改为

template <typename T>
const T& max(const T& a, const T& b, const T& c) 
{
    (const T)return max(max(a,b),c);
}

然后它成功编译。

如果Tchar *,则max(max(a,b),c)的类型为const char*,即const T。为什么呢?

1 个答案:

答案 0 :(得分:2)

如果Tchar *(指向char的指针),那么max<T>()的返回类型是而不是 char const *(指向常量字符的指针) )。

char *const&(对常量指针引用char)。

您收到错误,因为您无法将指针隐式转换为常量char 指向指向可变char 的指针。