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

网站制作在哪里找电商运营的基本流程

网站制作在哪里找,电商运营的基本流程,web动态网站开发试卷a,在线购物网站功能模块目录 模板的概念 函数模板(Function Templates) 基本用法 函数模板的实例化 匹配原则 类模板(Class Templates) 模板的概念 C中的模板(Templates)实际上是一种泛型编程(Generic Programm…

目录

模板的概念

函数模板(Function Templates)

基本用法

函数模板的实例化

匹配原则

类模板(Class Templates)


模板的概念

C++中的模板(Templates)实际上是一种泛型编程(Generic Programming)技术。泛型编程的核心思想是编写能够处理不同类型数据的通用代码,而不必为每种数据类型都编写独立的代码。这使得代码更加灵活、可重用和高效。模板可以在编写代码时将类型参数化,允许我们在不同的数据类型上执行相同的操作,从而提高了代码的通用性。它们在很多情况下都可以代替手动编写相似的代码,从而减少了冗余代码的数量。

然而,模板编程也可能引入一些复杂性。编译器在实例化模板时会生成特定类型的代码,因此模板可能导致编译时间增加。同时,错误消息也可能变得较为晦涩,因为模板的错误信息通常在编译器实例化时才会显示。

C++中的模板有两种主要形式:函数模板和类模板。

函数模板(Function Templates)

函数模板允许我们定义通用的函数,其中的参数类型是参数化的。这样,我们可以编写一次函数代码,然后在不同类型的参数上调用该函数,而无需为每种参数类型都编写一个单独的函数。函数模板使得我们能够编写一次算法代码,然后用于不同类型的数据。

基本用法

template<typename T1, typename T2,......,typename Tn>
返回值 函数名(参数列表)
{// 函数体
}/* 注释:这里的typename也可以用class。typename是C++11标准支持的,C++11之前,一般都用class
*/

用法示例

// 一个模板参数
template<typename T>
void add(T& a, T& b)
{return a + b;
}// 两个模板参数
template<typename T1, typename T2>
void add(T1& a, T2& b)
{return a + b;
}

函数模板的实例化

        函数模板可以看作是一个蓝图,它本身并不是函数,是编译器根据具体的使用方式产生特定类型函数的模具。所以模板其实就是将本来应该我们做的重复的事情(比如定义多个类似的函数重载)交给了编译器。
        在编译器的编译阶段,编译器会根据传入的实参类型来推演生成对应类型的函数以供调用。比如,当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后生成一份专门处理double类型的代码,这样我们在使用double类型代码时就会找到对应的代码入口,而不是要找函数模板的位置。也就是说,当我们使用了两种类型的模板时,比如T为int和T为double的情况,这两种其实生成的是两个代码,只不过这些工作都由编译器为我们做了。


用不同类型的参数使用函数模板就被称为函数模板的实例化。模板参数实例化分为隐式实例化和显式实例化。隐式实例化,让编译器根据实参推演模板参数的实际类型;显式实例化,在函数名后的<>中指定模板参数的实际类型。

假定有如下的类模板:

template<class T>
T Add(const T& left, const T& right)
{return left + right;
}

那么对应的示例如下:

Add(7,8); // 隐式实例化
Add<int>(2,5);  // 显示实例化// 隐式实例化可能会出现类型自洽,比如下面这种
Add(10, 3.14159); //error// 相应的问题显示实例化就不大容易出现
// 因为果类型不匹配,编译器会尝试进行隐式类型转换,如果无法转换成功,编译器将会报错
// 下面这句代码就是3.14向指定的int算数转换,且可以转换成功,故代码正常运行
Add<int>(20, 3.14); //OK

匹配原则

  1. 一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函数。
  2. 对于非模板函数和同名函数模板,如果其他条件都相同,在调用时会优先调用非模板函数而不会从该模板产生出一个实例。反之, 那么将选择模板的情况。
  3. 模板函数不允许自动类型转换,但普通函数可以进行自动类型转换

示例如下:

// 专门处理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版本
}
// 专门处理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函数
}


 

类模板(Class Templates)

类模板允许我们定义通用的类,其中的数据类型和一些行为是参数化的。通过在实例化时提供具体的类型参数,我们可以创建一个特定类型的类。这使得我们能够编写一次代码,然后在多种不同数据类型上使用。类模板允许我们创建具有通用行为的类,而不必为每种类型都创建一个新类。

写法格式

template<typename T1, typename T2, ..., typename Tn>
class 类模板名
{// 类内成员定义
};/* 注释:这里的typename也可以用class。typename是C++11标准支持的,C++11之前,一般都用class
*/

实例化

类模板的实例化不同于函数模板的实例化,类模板的实例化只能显示实例化,即使用时必须显示的指定类型,编译器无法对类模板进行类型推导。

http://www.dt0577.cn/news/20999.html

相关文章:

  • 做任务免费领取东西的网站网页设计与制作用什么软件
  • 做网站需要跟客户了解什么软件北京做seo的公司
  • 广东网站开发建设厦门seo排名外包
  • 做珠宝网站价格多少微商已经被国家定为传销了
  • 乐都网站建设公司今日重大国际新闻
  • 如何在淘宝上接单网站建设网络域名
  • 佛山市平台购物网站制作公司宁波网站制作优化服务公司
  • 哪个网站上做ppt比较好看网络广告的特点
  • 商务网站需求说明书电商广告
  • 打开网站关联词有哪些小学
  • 凡科建站官网需要什么推广注册app赚钱平台
  • 网络建设网站正规的网店培训机构有哪些
  • 网站查询功能怎么做山西网络营销外包
  • vue做的网站大全海外网络专线
  • 武汉手机网站成都网站优化
  • 网络推广做哪个网站比较好seo站内优化包括
  • 做的网站 为什么百度搜不到品牌广告语经典100条
  • 怎么自己做网站凑钱网络营销的表现形式有哪些
  • 医妃在上王爷别乱来seo推广任务小结
  • 泰州做网站哪家好seo优化范畴
  • 设计一个电子商务网站推广找客户平台
  • 网站设计哪家便宜怎么学seo基础
  • 卡片式多图流的WordPress主题模板百度爱采购关键词优化
  • 兰州网站建设模板下载上海搜索排名优化
  • 免费给别人开发网站广告公司
  • 做网站构架长尾关键词挖掘工具爱网站
  • 自己做网站模板2022百度seo优化工具
  • 网站如何做一张轮播图找资源最好的是哪个软件
  • 新手学做网站视频成都网站排名生客seo怎么样
  • 网页设计与网站建设课程设计上海网站建设关键词排名