gpt4 book ai didi

c++ - 模板函数和该函数的非模板重载,哪个是最佳匹配?

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:13 36 4
gpt4 key购买 nike

代码如下:

template <class InputIterator, class OutputIterator>
inline OutputIterator copy(InputIterator first, InputIterator last,
OutputIterator result)
{
return __copy_dispatch<InputIterator,OutputIterator>()(first, last, result);
}

//A overload version
inline char* copy(const char* first, const char* last, char* result) {
memmove(result, first, last - first);
return result + (last - first);
}

如果我调用最匹配的copy(int*, int*),编译器是否会使用int*作为模板参数实例化一个新函数,或 int* 将转换为 char*

如果我调用 copy(char[], char[]),注意我只是使用 char[] 来记录参数的类型。

最佳答案

由于 int * 不能隐式转换为 char *const char *,因此将调用模板函数。删除模板函数会导致编译时错误。

建议:自己动手玩转编译器有很大的值(value)。您可以添加类似

的行
std::cout << "template function called.\n";

进入你的重载或使用调试器来做那种事情。这是一次很棒的学习经历。您也可以简单地阅读一些 C++ 书籍以获得介绍。

关于c++ - 模板函数和该函数的非模板重载,哪个是最佳匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17229502/

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