第八章 函数探幽(内联函数、函数重载、函数模版、引用变量)

8.1 C++内联函数

编译过程的最终产品是可执行程序(由机器语言指令组成),与操作系统有关,每条指令都由指定的内存地址,计算机逐条执行,有时需要跳过一些指令(if,for),向前向后跳到特定地址。常规函数调用也是程序跳到函数的地址,并在函数调用结束后返回,而内联函数,程序无需跳到另一个地址,编译器将使用相应的函数代码替换函数调用。
内联函数的运行速度比常规函数快,但需要占用更多内存。
在这里插入图片描述
使用规则:

  • 在函数声明前加上关键字inline;
  • 在函数定义前加上关键字inline。
    内联函数不能递归(调用自己)
    内联函数与宏函数的机制不同,内联函数是通过传递参数实现的,而宏函数则是通过文本替换实现的。

8.2 引用变量

8.2.1 创建引用变量

C++使用&来声明引用变量
在这里插入图片描述
rodents作为rats的别名,rodents引用变量,允许两个变量进行互换,也就是他们指向相同的值和内存单元。
引用变量必须在声明时进行初始化,而指针可以先声明再赋值,引用变量更像const指针,一旦与某个变量关联起来,就不会更改地址。

8.2.2 将引用变量用作函数参数

引用经常被用作函数参数,使得函数中的变量名成为调用程序中的变量的别名。
这种引用传递就不需要再创建实参副本了,直接就可以将值传递给主函数中的原变量。
在这里插入图片描述

8.2.3 引用的属性和特别之处

引用变量与实参有关,当实参类型正确但不是左值(可被引用的数据对象);实参的类型不正确,但可以转换为正确的类型,这些情况都会生成临时变量。
在这里插入图片描述

8.2.4 将引用变量用于结构

引入引用变量可以直接修改结构中的值
不能返回函数中声明的变量
在这里插入图片描述

8.2.5 将引用用于类对象

在这里插入图片描述

8.2.6 对象、继承和引用

继承:将特性从一个类(基类)传递到另一个类(派生类),另一个类拥有类这个类的方法。
基类引用可以指向派生类对象而无需进行强制类型转换,因此,可以定义一个接受基类引用作为参数的函数,调用该函数时,可以将基类对象作为参数,也可以将派生类对象作为参数。

8.2.7 何时使用引用参数

在这里插入图片描述

8.3 默认参数

默认参数是指当函数调用中省略了实参时自动使用的一个值。

8.4 函数重载

函数重载是指可以有多个同名的函数,类似于一个词有不同的状态(动词、名词),编译器将根据所采取的用法使用有相应特征标(相同参数列表)的原型。
仅当函数基本上执行相同任务,但使用不同形式的数据时,才应采用函数重载。

8.5 函数模版

函数模版使用泛型来定义函数,其中的泛型可用具体的类型替换。通过将类型作为参数传递给模版,可使编译器生成该类型的函数。
在这里插入图片描述
分别为非模版、模版、模版具体化
在这里插入图片描述
编译器使用模版为特定类型生成函数定义时,得到的是模版实例。(隐式实例化)
显示实例化
在这里插入图片描述
显示具体化
在这里插入图片描述
显示实例化的函数模版可以用于定义其他类型,显示具体化的函数模版不能定义其他类型。

编译器选择函数版本:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值