C++ Primer Plus:第八章 - 函数探幽

0、本章内容:

内联函数。

引用变量。

如何按引用传递函数参数。

默认参数。

函数重载。

函数模板。

函数模板具体化。

1、C++内联函数:

为提高程序运行速度所做的一项改进。

在函数声明前加上关键字inline,在函数定义前加上关键字inline。

不能使用递归。

2、引用变量:

2.1 创建引用变量

指向相同的值和内存单元,会一起变换。

引用在声明的时候必须初始化。

使用指针也不能修改引用的指向。

2.2 将引用作为函数参数

2.3 引用的属性和特别之处

传引用的限制更加严格,必须是左值引用。

当且仅当使用const引用,实参与引用参数不匹配,产生临时变量。

应该尽可能使用const,可以处理const和非const实参。

2.4 将引用用于结构

返回引用要避免返回不存在的单元引用。

常规的非引用函数返回类型是右值,不可以通过地址访问该值。

2.5 将引用用于类对象

2.6 对象、继承和引用

2.7 何时使用引用参数

如果是常规数组,则使用指针。

3、默认参数:

声明必须从右到左添加默认值,调用必须从左到右赋值。

原型添加默认值,定义可以不添加默认值。

4、函数重载:

特征表不同才允许重载。

如果有多种可能的调用,编译器拒绝这种调用。

const可用于重载指针和引用,但调用时候并不区分是否是const变量。
左值、右值、const等与调用函数均匹配的时候,选择最匹配的函数。

4.1 重载示例

4.2 何时使用函数重载

5、函数模板:

调用时确实生成并使用,不能缩短编译时间。

5.1 重载的模板

并非所有的模板参数都必须是模板参数类型。

5.2 模板的局限性

部分运算符不能使用所有的类型。

5.3 显式具体化

优先级:非模板 > 显式具体化 > 常规模板

5.4 实例化与具体化

显式/隐式实例化的优先级与显式实例化相同。

可在创建函数时显式实例化,并且可以类型强转(传引用必须保证类型相同)。

不能同时使用同一种类型的显式实例化和显式具体化。

5.5 编译器选择使用哪个函数版本

完全匹配、提升转换、标准转换、用户定义的转化

较具体的函数优先级更高。

多个参数匹配原则是选择所有参数匹配程度都不比其他函数差,且至少有一个高于其他。

5.6 模板函数的发展

decltype用来解决不知道函数运行生成的变量类型的问题。

可用auto … ->decltype()来确定返回类型

6、总结:

null。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值