如何解决返回类型上的重载功能? 重新访问
| 有人可以告诉我在以下两种情况下编译器有什么不同吗? #include <cstdio>
using namespace std;
template <typename TReturn,typename T>
TReturn convert(T x)
{
return x;
}
int main()
{
printf(\"Convert : %d %c\\n\",convert<int,double>(19.23),convert<char,double>(100));
return 0;
}
和
int convert(double x)
{
return 100;
}
char convert(double x)
{
return \'x\';
}
int main()
{
printf(\"Convert : %d %c\\n\",convert(19.23),convert(100)); // this doesn\'t compile
return 0;
}
第一种情况是否没有函数重载?
解决方法
当编译器遇到对模板函数的调用时,它使用模板自动生成一个函数,该函数用作为实际模板参数传递的类型(在这种情况下为double)替换每个外观,然后对其进行调用。该过程由编译器自动执行,并且对于程序员是不可见的。因此,它还实现了数据抽象和隐藏。
编译器不会将模板视为常规函数或类。它们是按需编译的,这意味着直到需要时才编译模板函数的代码。
第二个例子不是超载。您拼写错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。