C++中函数模板和模板函数的区别

 我来答
晴晴知识加油站
高能答主

2018-05-22 · 让梦想飞扬,让生命闪光。
晴晴知识加油站
采纳数:3595 获赞数:661328

向TA提问 私信TA
展开全部

模板函数可以进行隐式的数据类型转换,中函数模板不会进行自动类型转换。

一、函数模版和同名普通函数在同一个作用域中,会优先调用哪个函数,具体如下:

1.函数模型在进行调用的时候会进行严格的类型匹配,而普通函数在调用的时候,会进行函数参数类型转换(前提是自动类型转换)。

2.调用函数模版,本质是类型参数化,将要严格的按照类型进行匹配,不会进行自动类型转换

3.调用普通函数,可以进行隐式的数据类型转换(前提是可以进行自动类型转换),这是普通函数和模版函数的本质区别。

二、函数模版可以像普通函数被重载

1.C++编译器优先考虑普通函数:这是因为普通函数已经存在了,而模版函数还需要进一步的判断,如果函数模版产生一个更好的匹配,那么优先选择函数模版。

2.可以通过空模版实参列表的语法限制编译器只调用模版函数(也就是在参数名之后加上<>,隐含了自动类型推断!),C++编译器是如何支持模版机制的。

sunqiangqidian
2009-03-11 · TA获得超过504个赞
知道小有建树答主
回答量:323
采纳率:0%
帮助的人:0
展开全部
函数模板提供了一类函数的抽象,它提供了任意类型为参数及返回值。函数模板经实例化后生成的具体函数成为模板函数。函数模板代表了一类函数,模板函数表示某以具体函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jaycnvip
2009-03-11 · TA获得超过767个赞
知道小有建树答主
回答量:998
采纳率:100%
帮助的人:645万
展开全部
类 实例化生成 实例(对象)
函数模板 实例化生成 模板函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-09-04
展开全部
2.1 函数模板的定义
不管它们的性质如何,所有的函数模板都具有同样的基本格式:
template<参数说明>
函数头
函数体

例如,下面是一个2参数的模板的声明:
template<class T>
T max(T param1 ,T param2)
{
//此处为函数体
}

2.根据上面已定义的模板,编译器将可生成下面的模板函数(都是对的,函数模板的目的就是函数重载):
char * max(char * a, char * b) //模板函数1
{
return (a>b)?a:b;
}

int max(int a, int b) //模板函数2
{
return (a>b)?a:b;
}

double max(double a, double b) //模板函数2
{
return (a>b)?a:b;。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ziguowen
推荐于2017-09-06 · TA获得超过2723个赞
知道小有建树答主
回答量:785
采纳率:35%
帮助的人:349万
展开全部
2.1 函数模板的定义
不管它们的性质如何,所有的函数模板都具有同样的基本格式:
template<参数说明>
函数头
函数体

例如,下面是一个2参数的模板的声明:
template<class T>
T max(T param1 ,T param2)
{
//此处为函数体
}

2.根据上面已定义的模板,编译器将可生成下面的模板函数(都是对的,函数模板的目的就是函数重载):
char * max(char * a, char * b) //模板函数1
{
return (a>b)?a:b;
}

int max(int a, int b) //模板函数2
{
return (a>b)?a:b;
}

double max(double a, double b) //模板函数2
{
return (a>b)?a:b;
}
等等。。。。。。。。。。。。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式