内联函数

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

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. ubuntu下MySQL安装配置及基本操作

    在linux下安装方法: 分为四种:一: 直接用软件仓库自动安装(如:ubuntu下,sudo apt-get install mysql-server; Debain下用yum安装): 二:官网下载 ...

  2. Chrome extension

    PageSpeed Tincr SpriteMe JSONView FireMobileSimulator for Google Chrome™

  3. 如何让窗口控件半透明(控件在Paint自己时,首先向主窗口询问,获取主窗口上控件所在区域的背景图)

    在网上关于窗口视觉效果,有2个问题被问得最多:第一个是如何让窗口边框有阴影效果?第二个是如何让窗口控件有半透明效果? 对于第一个问题,我们的答案是用双层窗口模拟或是用Layered Window.在X ...

  4. VS中的预先生成事件和后期生成事件

    原文:VS中的预先生成事件和后期生成事件 在C#开发中,有时候需要在程序编译之前或之后做一些操作. 要达到这个目的,可以使用Visual Studio中的预先生成事件和后期生成事件. 下图是一个简单例 ...

  5. cursor pin S wait on X

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

  6. 【HDOJ】2809 God of War

    状态DP. /* 2809 */ #include <iostream> #include <queue> #include <cstdio> #include & ...

  7. Currency Exchange(判断是否有正环)

    Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 16456   Accepted: 5732 Description Seve ...

  8. COJN 0558 800600带通配符的字符串匹配

    800600带通配符的字符串匹配 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 通配符是一类键盘字符,当我们不知道真正字符或者 ...

  9. sql(SqlServer)编程基本语法

    一.定义变量 --简单赋值 declare @a int set @a=5 print @a   --使用select语句赋值 declare @user1 nvarchar(50) select @ ...

  10. Java 设计模式实现 不错的引用

    这段时间有兴趣重新温习一下设计模式在Java中的实现,碰巧看到一个不错的设计模式总结,这里引用一下作为参考. 创建型模式: JAVA设计模式-Singleton JAVA设计模式-Factory JA ...