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


相关推荐

  • Quartus II 13.1的安装及使用

    Quartus II 13.1的安装及使用QuartusII的安装及使用前言一、QuartusII的下载二、QuartusII的安装三、QuartusII的注册四、QuartusII的使用(一)相关驱动的配置(二)使用流程的认识(三)使用过程总结前言本文章是对QuartusII13.1的安装及使用方法的介绍说明。一、QuartusII的下载百度网盘下载链接:https://pan.baidu.com/s/1a9d-bq9RZmWrRV542X4IEA提取码:ifte说明:本链接来自于正点原子官方资料下载二、

    2022年10月16日
    0
  • MinGW安装教程——著名C/C++编译器GCC的Windows版本[通俗易懂]

    前言本文主要讲述如何安装C语言编译器——MinGW,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用。编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他人更容易理解作者的意图及思想。因此,我将安装MinGW的过程和步骤,编写成了这篇以图片为主的教程,为了让看到这篇文章的任何人,都可以很容易按照图片所示正确安装MinGW。一、什么是MinGW…

    2022年4月8日
    66
  • Ubuntu 安装 yum

    Ubuntu 安装 yum120@110:~$sudoapt-getinstallyum120@110:~$aliasyum=’sudoapt-get’120@110:~$yuminstall119正在读取监狱室列表…完成正在分析监狱头犯的依赖关系树正在读取状态信息…完成

    2022年6月16日
    28
  • jsp+ajax_javascriptjavascript日

    jsp+ajax_javascriptjavascript日明后两天梁言兵老师来讲Ajax及其最近作过的一个真实的Ajax项目,所以,我今天讲解梁老师的课程所需要的一些前置知识。因为大家对Javascript不是很熟悉,所以我首先讲解Javascript的DHTML功能。本来入学考试要求大家很好地掌握Javascript的,但是大家都不能理解我们的苦衷,并没有专心去对待Javascript。想想我前两年强调javascript和css的重要性时,一些培训中

    2022年9月11日
    0
  • 讨论关于RAID以及RAID对于存储的影响

    讨论关于RAID以及RAID对于存储的影响

    2021年11月24日
    53
  • gitlab注册收不到邮件_matlab收不到邮件

    gitlab注册收不到邮件_matlab收不到邮件gitlab安装在ubuntu系统上(腾讯云上),在/etc/gitlab/gitlab.rb配置发送邮件的邮箱。gitlab_rails[‘smtp_address’]=”smtp.163.com”gitlab_rails[‘smtp_port’]=25gitlab_rails[‘smtp_tls’]=false其他配置略。之前是可以发送邮件的。…

    2022年9月12日
    0

发表回复

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

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