gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:39:35 25 4
gpt4 key购买 nike

#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: error: invalid conversion from 'const char*' to 'char*' [-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。为什么?

最佳答案

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

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

您会收到一个错误,因为您不能将指向常量字符的指针隐式转换为指向可变字符的指针

关于c++ - 模板函数中的引用类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38738496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com