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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 设置代理服务器_网络代理

    java 设置代理服务器_网络代理importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.*;importjava.util.Base64;publicclassTest{publicstaticvoidmain(String[]arg…

    2022年9月10日
    0
  • linux更改密码策略_hpunix设置用户密码策略

    linux更改密码策略_hpunix设置用户密码策略如何设置 Linux 系统的密码策略

    2022年4月22日
    219
  • printwriter用法_stylewriter使用教程

    printwriter用法_stylewriter使用教程OutPutStream可以被封装成PrintWriter,OutputStream比较底层一些,是以字节为单位传输的,而PrintWriter是以字符为单位输出,所以就会涉及到转码编码的问题,如果用PrintWriter发送char[]和byte[],在服务端收到的常常是有一些字符会失真.PrintWriter以字符为单位,支持汉字,OutPutStream则不行总结:处理

    2022年8月10日
    2
  • Office2010序列号_序列号被更换能升级吗

    Office2010序列号_序列号被更换能升级吗Office2010修改|更改|更换序列号的办法http://blog.csdn.net/microtong佟强2010年9月27日Office2010安装的时候,填了个序列号,安装成功了。但是后来激活没有成功。怎么更换序列号呢?进入控制面板,选择程序和功能,找到Office2010,点击右键,选择更改,参看下图。

    2025年5月22日
    0
  • js添加元素方法

    js添加元素方法1.insertBefore添加元素到指定位置<ulid=”ul”><li>1</li><li>2</li><li>3</li></ul><ulid=”sel”></ul><script>varbtn=docume…

    2022年6月22日
    22
  • 继电器的驱动电路

    继电器的驱动电路文章目录前言一、DC5V,DC12V,DC~V是什么?二、使用步骤1.小测试三极管如何驱动继电器总结前言很多同学不知道继电器如何使用,这里简单的介绍一下,我这里介绍一下5脚的继电器一、DC5V,DC12V,DC~V是什么?这里的5V,12V指的是继电器的工作电压,也就是1脚和3脚两端的电压,具体看电压器的规格,如果你是DC5V,那你1脚和3脚之间的电压必须是5V,2脚是输入,5脚是常闭端,也就是平时2脚跟5脚连接在一起,当13脚电流达到50mA之后,触点就打到了4脚,也就是说2脚跟4脚连在了一起。

    2022年6月24日
    23

发表回复

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

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