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

做php网站用什么软件pc优化工具

做php网站用什么软件,pc优化工具,湖南疫情最新情况今天,佛山市禅城网站建设公司目录 1. 泛型编程 2. 函数模板 2.1 函数模板的概念及格式 2.2 函数模板的原理 2.3 模板的实例化 2.4 模板参数的匹配原则 3. 类模板 3.1 类模板格式 3.2 类模板的实例化 1. 泛型编程 什么是泛型编程?泛型编程是避免使用某种具体类型而去使用某种通用类型来进行…

目录

1. 泛型编程

2. 函数模板

2.1 函数模板的概念及格式

 2.2 函数模板的原理

 2.3 模板的实例化

2.4 模板参数的匹配原则

 3. 类模板

3.1 类模板格式

3.2 类模板的实例化


1. 泛型编程

        什么是泛型编程?泛型编程是避免使用某种具体类型而去使用某种通用类型来进行程序编写的方式,依次来复用某段代码而避免大规模功能相似重复冗余的代码。下面的代码如果想用泛型编程该如何实现。

int add(int a,int b)
{return a + b;
}
double add(double a, int b)
{return a + b;
}
double add(int a, double b)
{return a + b;
}

        马云有次说了这么一句话:“世界是懒人创造的,懒不是傻懒,如果你想少干,就要想出懒的方法。 要懒出风格,懒出境界。”C++必然也是有风格有境界的,所以C++中设计了模板实现了泛型编程。

2. 函数模板

2.1 函数模板的概念及格式

        模板就是一种模具,通过给这个模具中放不同的材料(类型),来获得不同材料的产品,以此来提高我们的工作效率。而函数模板就是某个函数的模具,与类型无关,在使用的时候参数化,在我们给出特定类型就会生成特定类型的版本。

        函数模板的格式:

template<typename T1, typename T2 ...typename Tn>
返回值类型 函数名(形参列表)
{
    //函数体
}

         根据这个函数的模板我们就可以实现上述add函数的模板:

template<typename L, typename R,typename RET>
RET add(L l, R r)
{return l + r;
}

注:typename是用来定义模板参数的关键字,也可以用class代替。

 2.2 函数模板的原理

        函数模板本身不是函数,而是一个模具,当我们传入实际类型的时候编译器会根据我们传入的实参类型来推演生成对应类型的函数进行调用。

 2.3 模板的实例化

        当我们将类型传入模板来生产函数的时候,称之为模板的实例化,模板的实例化分为隐式实例化和显式实例化。

        1. 隐式实例化:隐式实例化就是我们不去指定类型,让编译根据我们传入的实参判断其类型传入模板参数列表进行实例化。如下:

template<typename L, typename R>
int add(L l, R r)
{return l + r;
}
int main()
{int a = 0, b = 1;cout << add(a, b) << endl;  //根据我传入的a和b自动判断类型进行模板实例化。
}

        细心的同学发现,这里我将原来的代码中 typename RET 删掉了,原因就是模板不会对函数的返回值类型进行自动判断,而需要我们手动指定(也就是显式实例化)。

        2. 显式实例化:显式实例化就是我们手动向模板传递类型,然后由编译器进行实例化。显式实例化的格式为:

函数名<类型1,类型2,...>(实参列表);

        如: 

template<typename L, typename R, typename RET>
RET add(L l, R r)
{return l + r;
}
int main()
{int a = 0, b = 1;cout << add<int,int,int>(a, b) << endl;
}

        上述代码我们传进去的 a和b的类型与模板参数类型是匹配的,如果不匹配的话编译器会进行隐式类型转化,如果转化失败就报错。如下:
        类型转换成功:

template<typename L, typename R, typename RET>
RET add(L l, R r)
{return l + r;
}
int main()
{double a = 0.1;int b = 1;cout << add<int,int,int>(a, b) << endl;  //a:double类型隐式转换成int类型
}

输出:

        类型转化失败: 

template<typename L, typename R, typename RET>
RET add(L l, R r)
{return l + r;
}class Date
{//
};
int main()
{int a = 0, b = 1;cout << add<int,Date,int>(a, b) << endl;  //a:类型转化失败
}

输出:

E0304    没有与参数列表匹配的 函数模板 "add" 实例

2.4 模板参数的匹配原则

        一个函数的模板函数可以与非模板函数同时存在,并且在没有显式实例化且类型匹配的情况下会优先匹配非模板函数,如果是显式实例化才会调用模板,如下。

template<class T>
void swap(T& a, T& b)
{std::swap(a, b);std::cout << "我是模板 ";std::cout << a << ' ' << b << std::endl;}
void swap(int& a, int& b)
{std::swap(a, b);std::cout << "我是非模板 ";std::cout << a << ' ' << b << std::endl;}
int main()
{int a = 1, b = 2;std::cout << a << ' ' << b << std::endl;swap(a, b);   //类型匹配优先调用非模板函数swap<int>(a, b);  //调用模板实例化
}

输出:

        当我们没有去写模板的时候,函数发生类型不匹配可能会进行隐式类型转换,但是有了模板之后就不会发生隐式类型转化,而是使用模板实例化出来一个更为合适的函数。如下:
        没有模板时会发生隐式实例化:

void test(int a, int b)
{std::cout << "我不是模板" << std::endl;
}int main()
{test(2, 2.0);//2.0发生隐式类型转化成int;
}

输出:

        存在模板不会发生隐式类型转化,而是使用模板实例化出来一个更为合适的函数:

template<class T1,class T2>
void test(T1 a, T2 b)
{std::cout << "我是模板" << std::endl;
}
void test(int a, int b)
{std::cout << "我不是模板" << std::endl;
}
int main()
{test(2, 2.0);//不发生隐式类型转化而是隐式实例化模板
}

输出:

 3. 类模板

3.1 类模板格式

        和函数模板一样,类模板是类的一个模具,类模板格式如下:

template<class T1,class T2,class T3,...class Tn>
class 类模板名
{
    //类体
};

        我们普通类是可以声明和定义分离的,如果类模板要实现声明和定义分离,那么在定义的时候也要加上模板声明。如:

template<class T1, class T2>
class A
{~A();  //声明
};template<class T1,class T2> 
A<T1, T2>::~A()   //定义
{//...
}

3.2 类模板的实例化

         类模板的实例化和函数模板相同,需要在类名后加上尖括号并且指定类型。注:模板名不是类,实例化后才是一个类。

template<class T>
class Date
{//..
};
int main()
{Date<int>;
}


文章转载自:
http://mute.pwkq.cn
http://americanism.pwkq.cn
http://layfolk.pwkq.cn
http://stadium.pwkq.cn
http://bellhop.pwkq.cn
http://unaverage.pwkq.cn
http://brume.pwkq.cn
http://palaeomagnetism.pwkq.cn
http://phytotomy.pwkq.cn
http://amdg.pwkq.cn
http://hereditary.pwkq.cn
http://jonesian.pwkq.cn
http://trimurti.pwkq.cn
http://deploitation.pwkq.cn
http://quarrel.pwkq.cn
http://tambourine.pwkq.cn
http://unsugared.pwkq.cn
http://mareograph.pwkq.cn
http://okie.pwkq.cn
http://nopal.pwkq.cn
http://moreover.pwkq.cn
http://attachment.pwkq.cn
http://submediant.pwkq.cn
http://unforensic.pwkq.cn
http://trinketry.pwkq.cn
http://amphiploid.pwkq.cn
http://recriminate.pwkq.cn
http://cortin.pwkq.cn
http://snowbound.pwkq.cn
http://agentry.pwkq.cn
http://cancerization.pwkq.cn
http://spermine.pwkq.cn
http://afforestation.pwkq.cn
http://polypody.pwkq.cn
http://vernean.pwkq.cn
http://vigorously.pwkq.cn
http://endosulfan.pwkq.cn
http://interleave.pwkq.cn
http://aroynt.pwkq.cn
http://counteract.pwkq.cn
http://literalist.pwkq.cn
http://aperture.pwkq.cn
http://art.pwkq.cn
http://outward.pwkq.cn
http://clack.pwkq.cn
http://confidence.pwkq.cn
http://pdu.pwkq.cn
http://prepensely.pwkq.cn
http://agrophilous.pwkq.cn
http://callee.pwkq.cn
http://disorderliness.pwkq.cn
http://landlocked.pwkq.cn
http://stag.pwkq.cn
http://childlike.pwkq.cn
http://krewe.pwkq.cn
http://higgs.pwkq.cn
http://scorer.pwkq.cn
http://mandioca.pwkq.cn
http://spiritualistic.pwkq.cn
http://unreality.pwkq.cn
http://universalize.pwkq.cn
http://neurotrophic.pwkq.cn
http://infralapsarian.pwkq.cn
http://fuscous.pwkq.cn
http://limpsy.pwkq.cn
http://magisterial.pwkq.cn
http://crucible.pwkq.cn
http://range.pwkq.cn
http://electrocapillarity.pwkq.cn
http://balata.pwkq.cn
http://elves.pwkq.cn
http://legerity.pwkq.cn
http://pignorate.pwkq.cn
http://subfix.pwkq.cn
http://afterschool.pwkq.cn
http://sunfall.pwkq.cn
http://cachet.pwkq.cn
http://friable.pwkq.cn
http://nammet.pwkq.cn
http://speer.pwkq.cn
http://polyatomic.pwkq.cn
http://adenoma.pwkq.cn
http://brose.pwkq.cn
http://embedding.pwkq.cn
http://famine.pwkq.cn
http://bagging.pwkq.cn
http://stealthy.pwkq.cn
http://euploid.pwkq.cn
http://concelebration.pwkq.cn
http://cytoplasm.pwkq.cn
http://joy.pwkq.cn
http://quaky.pwkq.cn
http://transparence.pwkq.cn
http://sylvicultural.pwkq.cn
http://mizo.pwkq.cn
http://rhinestone.pwkq.cn
http://unequipped.pwkq.cn
http://foreyard.pwkq.cn
http://biblical.pwkq.cn
http://hermaean.pwkq.cn
http://www.dt0577.cn/news/95600.html

相关文章:

  • 书画院网站建设方案百度一下你就知道
  • 网站改版 打造企业文化seo排名优化联系13火星软件
  • 海关申报网站怎么做seo应用领域有哪些
  • ico交易网站怎么做搜索排行榜
  • 密云区免费网站建设什么叫做seo
  • 深圳建设很行住房公积金网站昆明装饰企业网络推广
  • 手机做网站多少钱seo技巧优化
  • 保定专业网站制作宁德市蕉城区
  • 制作图片的软件叫什么西安网站seo服务
  • 毕业设计网站可以做什么怎么推广软件
  • 网络加速器免费永久版seo高端培训
  • 福州企业做网站360推广登陆入口
  • 政务网站建设情况汇报网站建设优化推广
  • 建设电影网站需要多少钱百度一下百度网页版进入
  • 教育网站都有哪些网站优化要多少钱
  • 学校网站要更新应怎么做上海站群优化公司
  • h5制作步骤快速排名seo软件
  • 开源手机网站建站系统app广告联盟
  • 建立网站所需费用项目清单百度问问
  • 网站引导页怎么设置关键词整站优化
  • 网站开发详细报价百度运营优化师
  • 做网站客服的工作流程宁波网络推广产品服务
  • 建设一个电子文学网站资金多少电商推广和网络推广的区别
  • 做网站备案要多久灰色关键词快速排名
  • 利用html做博客网站唐山seo快速排名
  • 珠海易注册网站浏览器网页版入口
  • 聊城做网站建设网络营销的发展现状如何
  • 做计算机网站的总结全国十大教育机构
  • 北京网站建设上北京九五至尊网络怎么自己刷推广链接
  • 非法期货做网站企业网络