C++使用函数模板

C++使用函数模板

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

函数模板:

函数模板是蓝图或处方功能,编译器使用其发电功能系列中的新成员。

第一次使用时,新的功能是创建。从功能模板生成的函数的实例称为模板或模板的实例。函数模板的开始是keywordtemplate,表示这是一个模板。

其后是一对尖括号,它包括了參数列表。

在使用从模板中生成的函数之前,必须确保把声明(即原型)或模板的定义放在源文件里。模板的实例化仅仅生成一次。

假设兴许的函数调用须要同一个实例,就会调用已经创建好的实例,即使同一个实例在不同的源文件里生成,程序也仅会包括该实例定义的一个副本。

使用时须要注意两个问题:
第一,函数模板本身不做不论什么工作,它是编译器用于从函数调用中创建函数定义的处方或蓝图。

第二。全部工作都在编译和链接过程中完毕。

编译器使用模板生成函数定义的源码。再编译这些代码。链接程序的作用是仅把函数的一个实例链接到可运行模块上,即使几个不同的源文件调用同一个实例。也仅仅链接一个实例。在运行程序时,源码中是否存在模板根本不重要。

 

显示指定模板參数:

在调用函数时,能够显示指定模板的參数,以控制使用哪个版本号的函数。编译器不再判断用于替换T的类型,仅仅是接受指定的版本号。

在下列情形下,比較实用:

1、函数调用不是非常确切,编译失败。

此时能够使用该技巧帮助编译器去除不确定性。

2、在一些情况下,编译器不能判断出模板參数,因此无法选择要使用哪个版本号的函数。

3、为了避免有太多的函数版本号(从而避免过多占用内存)。能够强迫函数调用使用某个版本号的函数。

 

模板的说明:

对于某个參数值(在有多个參数的模板中,就是一组參数值)。模板的说明定义了它不同于标准模板的动作。模板说明的定义必须放在原语句的声明或定义之后。

假设把说明放在前面,程序就不会编译。

说明的定义以keywordtemplate开头,但要省略參数。所以原声明中模板參数外部的尖括号就是空的。必须定义说明的參数值。并且必须放在模板函数后面的尖括号里。以下看演示样例:

演示样例:

#include <iostream>
using std::cout;
using std::endl;
//模板声明
template<class T> T larger(T a,T b);
//模板说明声明
template<> long* larger<long*>(long* a,long* b);
int main(int argc,char* argv[]){

	cout<<"Larger of 1.5 and 2.5 is "<<larger(1.5,2.5)<<endl;
	
	int a_int=35;
	int b_int=45;
	cout<<"Larger of "<<a_int<<" and "<<b_int<<" is "
		<<larger(a_int,b_int)<<endl;
	
	long a_long=9;
	long b_long=8;
	cout<<"Larger of "<<a_long<<" and "<<b_long<<" is "
		<<larger(a_long,b_long)<<endl;
	
	//显示指定模板參数
	cout<<"Larger of "<<a_int<<" and "<<b_int<<" is "
		<<larger<long>(a_int,b_int)<<endl;
	
	//调用模板说明
	cout<<"Larger of "<<a_long<<" and "<<b_long<<" is "
		<<*larger(&a_long,&b_long)<<endl;
	return 0;	
} 
//模板定义
template <class T> T larger(T a,T b){
	cout <<"standard version"<<endl;
	return a>b?

a:b;}//模板描述定义template <> long* larger<long*>(long* a,long* b){ cout <<"specialized version"<<endl; return *a>*b?a:b;}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116720.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 通用代码高亮插件(SyntaxHighlighter)

    通用代码高亮插件(SyntaxHighlighter)写这篇博文的起源是我想把自己的博客弄的更加美观,相信你也一样。        首先,我要说SyntaxHighlighter插件的实现方式及应用示例,然后再说明如何将其应用到自己的博客,使博客的代码着色更加美观。 源码: SyntaxHighlighter 示例源码下载SyntaxHighlighterSyntaxHighlighter源码下载1)        Sy…

    2025年6月17日
    2
  • java byte转中文乱码_java byte转string 涉及到字节流中有中文[通俗易懂]

    java byte转中文乱码_java byte转string 涉及到字节流中有中文[通俗易懂]最近遇到一个问题,我用java写了一个客户端通过socket向服务器端发送消息,发送的内容是字节流,编码格式是GBK,服务器在收到消息后,如果格式正确,会返回固定的消息格式,同样也是字节流,编码格式也是GBK。现在问题来了,我怎么把字节流转换为字符流,当然是要能显示出中文。于是上网搜了一下,找到一篇博客,网址如下:http://bbs.csdn.net/topics/391939108,代码如下:…

    2022年6月15日
    80
  • python 使用PyQt5

    python 使用PyQt5

    2021年7月1日
    84
  • android apk 签名(平台和普通签名)

    android apk 签名(平台和普通签名)因为做了太多的终端项目,客户总会有自己的apk提供,这时候各种签名问题就来了,最近整理了一下相关知识,分享给大家。签名的用处:1.应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程…

    2022年6月6日
    78
  • Centos7监控服务异常发送邮件通知

    Centos7监控服务异常发送邮件通知

    2022年2月19日
    87
  • 推荐几个代码自动生成器,神器!!!「建议收藏」

    20个代码生成框架老的代码生成器的地址:https://www.cnblogs.com/skyme/archive/2011/12/22/2297592.html以下是大家推荐的最近很火爆的代码生成器神器。如果有更好的希望大家多多留言,我会及时补充上去。————————-更新补充———————————…

    2022年4月1日
    1.5K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号