关闭

C++中函数重载和函数模板的理解

发表于:2012-8-01 10:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈志鹏    来源:51Testing软件测试网采编

  第二遍看C++Primer Plus。。泪目啊。。C++真心难,第一遍是我一年前看的。现在再看感觉好像全新的一样。。。

  好了,简单介绍下函数重载,学过编程的都对这个重载很熟悉了。函数重载的判断标识是它的函数参数列表,而不是返回值来判断的。所以像

long gronk(int n, float m);
double gronk(int , float m);

  是会报错的。这没有函数重载。

  接下来是函数模板。

  函数模板类似

template<class Any>
void swap (Any &a, Any &b)
{
    Any temp;
    temp = a;
    a = b;
    b = temp;
}  

  接下来介绍下函数模板里非常重要的具体化和实例化。

  其实,在使用函数模板时,编译器会自动把模板实例化,称为隐式实例化,类似

void swap (int &a, int &b);

  就是实例化成了这样一个函数, 只不过是隐式的。

  显示实例化类似

template void swap<int>(int &a,int &b);

  显示具体化类似

template <> void swap<int>(int &a,in t &b);

  两者的差别是template后面的括号。

  具体化将会覆盖常规模板,非模板函数将会覆盖具体化和常规模板。

  在我的理解就是,显式具体化和显示实例化都是讲某一特定类型的模板函数进行实例化,调用它们时将不会调用模板函数的定义。所以同一编程单元中,同一类型不能同时存在显示具体化和显示实例化。否则二义了。

  好了,先介绍这里。明天开始我网络方面的可靠数据传输协议还要看看,C++的类和对象还要复习下,争取把const和引用的关系整理出来,也写一下。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号