#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);
}
然后它成功编译。
如果T
为char *
,则max(max(a,b),c)
的类型为const char*
,即const T
。为什么呢?
答案 0 :(得分:2)
如果T
是char *
(指向char的指针),那么max<T>()
的返回类型是而不是 char const *
(指向常量字符的指针) )。
char *const&
(对常量指针引用char)。
您收到错误,因为您无法将指针隐式转换为常量char 指向指向可变char 的指针。