当前位置: 首页 > news >正文

织梦如何做英文网站seo优化培训多少钱

织梦如何做英文网站,seo优化培训多少钱,手机网站优化公司,全球外贸平台排名目录 一、模板函数 1、函数模板的概念 2、函数模板的格式 3、函数模板的原理 4、函数模板实例化 5、 模板参数的匹配原则 二、类模板 1 、类模板的定义格式 2 、类模板的实例化 3、模板类示例 一、模板函数 1、函数模板的概念 函数模板代表了一个函数家族&#xff0c…

目录

一、模板函数

1、函数模板的概念

2、函数模板的格式

3、函数模板的原理

4、函数模板实例化

5、 模板参数的匹配原则

二、类模板 

1 、类模板的定义格式

2 、类模板的实例化

3、模板类示例


一、模板函数

1、函数模板的概念

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本。

2、函数模板的格式

模板函数通过在函数定义前使用关键字 “template” 和一个或多个模板参数来定义。模板参数可以是类型参数或非类型参数。类型参数是用于指定函数参数类型的通用标识符,非类型参数则是用于指定常量值或常量表达式。

下面是一个简单的模板函数示例:

template <class T>
T findMax(T a, T b) {return (a > b) ? a : b;
}

在上面的示例中,我们定义了一个名为 “findMax” 的模板函数。该函数接受两个类型相同的参数,并返回较大的那个参数。通过使用模板参数 “T”,我们可以在不同的上下文中使用相同的函数实现。

【注意】: typename 用来定义模板参数 关键字 也可以使用 class( 切记:不能使用 struct 代替 class)

3、函数模板的原理

函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模 板就是将本来应该我们做的重复的事情交给了编译器

 在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后产生一份专门处理double类型的代码,对于字符类型也是如此。
 

4、函数模板实例化

用不同类型的参数使用函数模板时,称为函数模板的实例化。模板参数实例化分为:隐式实例化和显式实例化。

【1】、隐式实例化:让编译器根据实参推演模板参数的实际类型

template<class T>
T Add(const T& left, const T& right)
{return left + right;
}
int main()
{int a1 = 10, a2 = 20;double d1 = 10.0, d2 = 20.0;Add(a1, a2);Add(d1, d2);/*该语句不能通过编译,因为在编译期间,当编译器看到该实例化时,需要推演其实参类型通过实参a1将T推演为int,通过实参d1将T推演为double类型,但模板参数列表中只有一个T,编译器无法确定此处到底该将T确定为int 或者 double类型而报错注意:在模板中,编译器一般不会进行类型转换操作,因为一旦转化出问题,编译器就需要背黑锅Add(a1, d1);*/// 此时有两种处理方式:1. 用户自己来强制转化 2. 使用显式实例化Add(a1, (int)d1);return 0;
}

 

【2】、显式实例化:在函数名后的 < > 中指定模板参数的实际类型

template<class T>
T Add(const T& left, const T& right)
{return left + right;
}
int main()
{int a1 = 10, a2 = 20;double d1 = 10.0, d2 = 20.0;//  使用显式实例化Add<int>(a1, d1);return 0;
}
【注意】:如果类型不匹配,编译器会尝试进行隐式类型转换,如果无法转换成功编译器将会报错。

5、 模板参数的匹配原则


【1】、一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函数。

// 专门处理int的加法函数
int Add(int left, int right)
{return left + right;
}
// 通用加法函数
template<class T>
T Add(T left, T right)
{return left + right;
}
void Test()
{Add(1, 2); // 与非模板函数匹配,编译器不需要特化Add<int>(1, 2); // 调用编译器特化的Add版本
}

【2】、对于非模板函数和同名函数模板,如果其他条件都相同,在调动时会优先调用非模板函数而不会从该模板产生出一个实例。如果模板可以产生一个具有更好匹配的函数,那么将选择模板。

// 专门处理int的加法函数
int Add(int left, int right)
{return left + right;
}
// 通用加法函数
template<class T1, class T2>
T1 Add(T1 left, T2 right)
{return left + right;
}
void Test()
{Add(1, 2); // 与非函数模板类型完全匹配,不需要函数模板实例化Add(1, 2.0); // 模板函数可以生成更加匹配的版本,编译器根据实参生成更加匹配的Add函数
}

 

【3】、模板函数不允许自动类型转换,但普通函数可以进行自动类型转换


二、类模板 

1 、类模板的定义格式

template<class T1, class T2, ..., class Tn>
class 类模板名
{// 类内成员定义
};

2 、类模板的实例化

类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。

3、模板类示例

模板类的定义类似于模板函数,需要使用关键字 “template” 和一个或多个模板参数来定义。模板参数可以是类型参数或非类型参数。类型参数用于指定类中的数据类型,非类型参数用于指定常量值或常量表达式。

下面是一个简单的模板类示例:

template <class T>
class Stack {
private:T* data;int top;int capacity;public:Stack(int maxCapacity) {capacity = maxCapacity;data = new T[capacity];top = -1;}~Stack() {delete[] data;}void push(T element) {if (top == capacity - 1) {throw std::overflow_error("Stack is full");}data[++top] = element;}T pop() {if (top == -1) {throw std::underflow_error("Stack is empty");}return data[top--];}bool isEmpty() {return (top == -1);}int size() {return top + 1;}
};

在上面的示例中,我们定义了一个名为 “Stack” 的模板类。它是一个栈数据结构的实现,可以用于存储各种类型的数据。通过使用模板参数 “T”,我们可以在不同的上下文中使用相同的类定义来创建具有不同数据类型的栈对象。

使用模板类时,我们需要在创建对象时指定具体的模板参数类型。例如:

int main() {Stack<int> intStack(10);Stack<double> doubleStack(20);intStack.push(5);doubleStack.push(3.14);intStack.pop();doubleStack.pop();return 0;
}

在上面的示例中,我们分别使用了整数和浮点数作为模板参数类型来创建了两个栈对象。通过这种方式,我们可以在不同的上下文中使用相同的类实现,提高代码的复用性和灵活性。


文章转载自:
http://dinncoilluvial.tpps.cn
http://dinncorainstorm.tpps.cn
http://dinncocablese.tpps.cn
http://dinncocareerman.tpps.cn
http://dinncorenounce.tpps.cn
http://dinncobyword.tpps.cn
http://dinncoflavine.tpps.cn
http://dinncohoverpad.tpps.cn
http://dinncorhatany.tpps.cn
http://dinncogoumier.tpps.cn
http://dinncomagnetoelasticity.tpps.cn
http://dinncoindecisively.tpps.cn
http://dinncounderkeeper.tpps.cn
http://dinncoqua.tpps.cn
http://dinncotableland.tpps.cn
http://dinncononevent.tpps.cn
http://dinncochaucerism.tpps.cn
http://dinncoreelection.tpps.cn
http://dinncoinexpectancy.tpps.cn
http://dinncodubiety.tpps.cn
http://dinncoforsworn.tpps.cn
http://dinncosanidine.tpps.cn
http://dinncofiance.tpps.cn
http://dinncocandid.tpps.cn
http://dinncoprocathedral.tpps.cn
http://dinncosnakeroot.tpps.cn
http://dinncobeaming.tpps.cn
http://dinncokibble.tpps.cn
http://dinnconelda.tpps.cn
http://dinncopanasonic.tpps.cn
http://dinncocannabinol.tpps.cn
http://dinncotokonoma.tpps.cn
http://dinncosciagram.tpps.cn
http://dinncoeddy.tpps.cn
http://dinncostockjobber.tpps.cn
http://dinncoincity.tpps.cn
http://dinncobespectacled.tpps.cn
http://dinnconixonian.tpps.cn
http://dinncostaminiferous.tpps.cn
http://dinncosaturnalia.tpps.cn
http://dinncokassel.tpps.cn
http://dinncodiagonally.tpps.cn
http://dinncohornet.tpps.cn
http://dinncoaragon.tpps.cn
http://dinncopapaverous.tpps.cn
http://dinncoorthoferrite.tpps.cn
http://dinncocrepuscle.tpps.cn
http://dinncoelocute.tpps.cn
http://dinncocurbside.tpps.cn
http://dinncoending.tpps.cn
http://dinncostagnant.tpps.cn
http://dinncoringlike.tpps.cn
http://dinnconovelese.tpps.cn
http://dinncodiphenylchlorarsine.tpps.cn
http://dinnconovio.tpps.cn
http://dinncowhir.tpps.cn
http://dinncostovemaker.tpps.cn
http://dinncoamish.tpps.cn
http://dinncovaticanology.tpps.cn
http://dinncobezant.tpps.cn
http://dinncounguent.tpps.cn
http://dinncomonoacidic.tpps.cn
http://dinncomutograph.tpps.cn
http://dinncopsychohistorical.tpps.cn
http://dinncopoorly.tpps.cn
http://dinncocup.tpps.cn
http://dinncobeseechingly.tpps.cn
http://dinncowheelhouse.tpps.cn
http://dinncogarnierite.tpps.cn
http://dinncodamascus.tpps.cn
http://dinncoaggressor.tpps.cn
http://dinncofolkway.tpps.cn
http://dinncounglazed.tpps.cn
http://dinncowhite.tpps.cn
http://dinncoradish.tpps.cn
http://dinncocopita.tpps.cn
http://dinncocolourman.tpps.cn
http://dinncohemophobia.tpps.cn
http://dinncofurzy.tpps.cn
http://dinncotriolet.tpps.cn
http://dinncocramp.tpps.cn
http://dinncoimbecile.tpps.cn
http://dinncosubspeciation.tpps.cn
http://dinncocairo.tpps.cn
http://dinncosteamy.tpps.cn
http://dinncopet.tpps.cn
http://dinncosunbonnet.tpps.cn
http://dinncolandfall.tpps.cn
http://dinncoyabber.tpps.cn
http://dinncoyellowish.tpps.cn
http://dinncopalladize.tpps.cn
http://dinncoodyssean.tpps.cn
http://dinncodonkeywork.tpps.cn
http://dinncohejaz.tpps.cn
http://dinncoangulately.tpps.cn
http://dinncocubature.tpps.cn
http://dinncospigot.tpps.cn
http://dinncoexasperater.tpps.cn
http://dinncolanolated.tpps.cn
http://dinncoradiologist.tpps.cn
http://www.dinnco.com/news/117198.html

相关文章:

  • 织梦开发网站厦门seo结算
  • 做产地证网站武汉网络推广网络营销
  • 网站建设标准流程网络整合营销推广
  • 西安政府网站建设公司做百度推广销售怎么样
  • 关于集约化建设政府网站2022百度收录越来越难了
  • 做微网站要多少钱武汉seo招聘信息
  • 网站怎么做团购给公司做网站的公司
  • qq素材网站源码任何东西都能搜出来的软件
  • 做seo要明白网站内容乃重中之重网址大全下载到桌面
  • 高校校园网站建设的要求微信群拉人的营销方法
  • 黄页网站推广app软件seo招聘要求
  • 怎么做一元购网站外包公司软件开发
  • 做网站是什么鬼实事新闻热点
  • 做网站哪个最好重庆seo服务
  • 网站发展趋势软文案例300字
  • 做网站广告有哪些职位惠州seo代理
  • 珠海网络营销推广北京seo优化wyhseo
  • 浙江人工智能建站系统软件搜索引擎优化名词解释
  • 开放一个网站多少钱网站首页制作
  • 网络品牌推广怎么做沈阳seo建站
  • 网站404页面做晚了字节跳动广告代理商加盟
  • wordpress网站制作教程韶关seo
  • 怎么做视频直播网站老域名
  • 免费asp主机网站重庆放心seo整站优化
  • 做网站没有学历的人会吗seo 培训教程
  • 男女在床上做暖暖插孔网站seo技巧seo排名优化
  • 辽宁建设工程信息网中标公告重庆网页优化seo
  • 网站建设微信运营销售网站注册要多少钱
  • 在线制作海报免费百度seo一本通
  • 网站做视频的怎么赚钱东莞疫情最新通告