内联函数

内联函数与常规函数的区别在于:

1.常规函数:在执行调用指令时,先存储该指令的内存地址,将函数参数复制到堆栈,然后跳转到被调用函数起点的内存单元,执行函数,将返回值放      入寄存器,最后跳回到一开始被保存的指令处。

2.内联函数:编译器将函数调用替换为函数代码,不需要跳转,但是内存开销大。

PS:内联函数不能递归,内联函数的函数体不能过大。使用时在声明和定义的前面都要加上关键字 inline。

引用传值

当函数的参数为const引用时,编译器将在以下两种情况生成临时变量:

1.实参类型不匹配,但是可以转换为正确类型。

2.实参类型匹配,但不是左值。

使用临时变量时,行为与按值传递类似,原始数据不修改而使用临时变量。

PS:基类的引用可以指向派生类对象。

默认参数

默认参数在函数原型中给出,必须从右向左添加默认值。

函数重载

关键是参数列表不同,类型引用和类型在重载时被视为同一个特征标。

同时存在多个重载函数时,不能进行强制转换匹配。

重载函数在编译时将进行名称修饰,以区别不同的重载函数。

模板函数

这里的模板也称参数化类型。

类似交换两个任意类型变量的值:

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

编译器将在编译时根据调用时使用的参数类型生成相应的函数。如使用 int,则将 T 替换成 int,生成一个函数。

这意味着模板并不能缩短最终编译的文件长度,它的好处在于安全地生成多个同样功能的函数以及减少手工编写代码量。

函数模板也可以重载,如:

 template<class T>
void tSwap( T &a, T&b ); template<class T>
void tSwap( T *a, T *b, int n );

但是当参数列表形式相同,又想为特定的类型调用特定的函数时,可使用显示具体化或显示实例化:

 //函数模板
template<class T>
void tSwap( T &a, T&b ); //显示具体化
template<> void tSwap<className>( className &A, className &B );
//或者
template<> void tSwap( className &A, className &B ); //显示实例化
template void tSwap<className>( className &A, className &B );

C++拾遗(七)函数相关(2)的更多相关文章

  1. javascript基础拾遗(七)

    1.对象的继承__proto__ var Language = { name: 'program', score: 8.0, popular: function () { return this.sc ...

  2. C++拾遗(六)函数相关(1)

    返回值 C++规定返回值不能是 数组.但可以是其它任何类型(包括结构体和对象). 通常,函数将返回值复制到指定的CPU寄存器或内存单元中,然后调用函数调用该内存单元的值. 函数原型 参数列表中可以不包 ...

  3. java多线程编程核心技术——第七章补漏拾遗

    本章主要知识点: 1)线程组的使用 2)如何切换线程状态 3)SimpleDateFormat类与多线程的解决方法 4)如何处理线程异常. 这本书基本来到了终点,其实在第四章来说,核心(基础)的线程知 ...

  4. Html5与Css3知识点拾遗(七)

    布局 实例:规范的命名和编排 <body> <div class="page"><!--page开始--> <header class=& ...

  5. 《JAVA多线程编程核心技术》 笔记:第七章:拾遗增补

    一.线程的状态 1.1 状态种类及理解:(一共6个) 文字说明和理解: NEW状态:线程实例化后还从未执行start()方法时的状态: RUNNABLE状态:线程进入运行的状态: TERMINATED ...

  6. C++拾遗(七)——关联容器

    关联容器(Associative containers)支持通过键来高效地查找和读取元素.两个基本的关联容器类型是 map 和set.map 的元素以键-值(key-value)对的形式组织:键用作元 ...

  7. 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文

    阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...

  8. CRL快速开发框架系列教程七(使用事务)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. 《LoadRunner12七天速成宝典》来了

    看到自己的新书又要发行了,算算从09年第一本书开始,不知不觉已经是第四本书了(帮朋友合写的书不算),每次写完之后都会说太累了,不想再写了,但是却又次次反悔,吞下食言的苦果.如果非要说第四本书的感受,那 ...

随机推荐

  1. iOS程序-UIScrollView的基本使用

    iOS程序-UIScrollView的基本使用 scrollView的几个属性contentSize contentOffset contentInset 1.不能向上滑动很可能是因为contentS ...

  2. Nhibernate 分页

    public IList<Student> GetStudentByPage(int pageSize, int pageIndex, string SName) { ISession s ...

  3. java中dynamic web project与web project 的区别 [转]

    原帖地址:http://blog.sina.com.cn/s/blog_46726d2401013jlk.html 文章框架: 1.Dynamic  Web Project 概念 2.eclipse ...

  4. cursor pin S wait on X

    cursor pin S wait on X: 这是10.2版本提出的mutex(互斥)机制用来解决library cache bin latch争夺问题引入的新事件,是否使用这种机制受到隐含参数_k ...

  5. SDUT2087 离散事件模拟-银行管理(模拟)

    题目链接. 分析: 模拟. 果然模拟什么的最讨厌了. 用e1,e2分别记录队列1,队列2的结束时间. 每个结点的s记录开始时间,e一开是记录逗留时间,进队列的时候,改成离开的时间.时刻记录总时间就可以 ...

  6. Hbase与RDBMS

    hbase与传统关系数据库区别 hbase适合于非结构化数据存储的数据库.介于Map Entry 和 DB row之间的一种数据存储方式. 1. 数据类型: HBase只有简单的字符串类型,它只保存字 ...

  7. sql优化(oracle)

    系统优化中很重要的方面是SQL语句的优化,对于海量数据,优质的SQL能够有效的提高系统的可用性. 总结的有点罗嗦,列个简单的目录啦~ 目录 第一部分知识准备                      ...

  8. flash 中无法导出swf文件的解决方法

    近一个星期,我的flash cs6一直导不出swf文件,郁闷了好长时间,今天终于在网上找到了解决办法:总结了一下,如下:      一.是把文字打散,变成形状.      二.是把汉字的字体设成fla ...

  9. [置顶] 软件架构师的12项修炼_读书纪要_P3商务技能修炼

    本系列的文章是我读书后的个人纪要(书摘),仅代表个人观点.如想了解更多相关内容,请购买正版物,支持原书作者.对应的图书可以从我的个人图书列表里找寻:个人毕业后图书列表 本书勾勒了软件架构师的必备技能的 ...

  10. 利用golang语法检查对象是否实现了接口

    var _ ipc.Server = &CenterServer{} CenterServer是否实现了 ipc.Server的接口.编译期间检测,这是很好的编程实践. 稍后详述...