C++ Primer Plus 第8章 函数探幽

第八章 函数探幽

1.函数调用会存储当前内存地址,然后跳到目标函数的起始地址,函数执行完会回到调用函数内存地址。
而使用内联函数,编译器将使用相应的函数代码替换函数调用,无需跳到另一个位置执行代码再回来。
代价是占用更多内存

2.内联函数在声明和定义时在前面添加inline

3,声明引用时,要初始化,是变量的别名

4.引用经常作为函数参数,使函数作为调用函数的别名,称为按引用传递

5.当引用参数为const时,实参类型正确,不是左值;类型不正确,但可以转换成正确类型。这种情况下会生成一个临时变量,提供给形参

6,。对于临时变量,它是一个右值

7.使用引用或指针的原则:
对于使用传递的值而不作修改的函数:
如果是类型对象很小,如内置类型(如int),则使用按值传递
如果是数组,则使用指针,并声明const
如果是较大的结构,则使用const指针或const引用,以提高程序的效率
如果是类对象,则使用const引用

对于会修改传入参数的函数
如果是内置类型,则使用指针
如果是数组,则使用指针
如果是结构,使用引用或指针
如果类对象,则使用引用

8.默认参数,在函数声明时对参数赋值
必须从右向左添加默认值

9.函数重载
关键是函数的参数列表——也称为函数特征标 包括参数数目和参数类型

特征标下,类型引用和类型本身视为同一个特征标
函数匹配时,并不区分const或非const变量

使用函数重载,编译器会对同名函数进行名称修饰,根据原型中指定的形参类型对函数名进行加密

10函数模板
template<typename T>   //typename可改为class,二者等价
typeName function(T,...)

最终的代码不包含任何模板,只包含为程序生成的实际函数

模板一般用于对不同类型使用同一个算法

显式具体化
对于一个函数名,非模板函数,模板函数或显式具体化函数以及其重载版本
显式具体化的原型和定义应在开头template<>
template <> void swap<int> (int,int)
要有自己的函数定义
非模板>具体化>常规模板 优先级

显式实例化
需要一个常规模板
对该模板实例化,声明前添加关键字template 函数名后添加<>,里面写上类型
如template void swap<int> (int,int)
根据模板,生成特定类型的函数

隐式实例化
调用模板函数则会生成一个函数定义

11。编译器如何选择函数版本
创建函数列表,同名的函数都会在表中
创建可选函数列表,要求参数都是能匹配的
确定最佳的可行函数,否则出错

12.对于如何选择最佳函数匹配,参看P289-P294

13.关键字decltype C++11新增 可代表模板类型运算后结果

14.后置返回类型
template<class T1,class T2>
auto gt(T1 x,T2,y) ->decltype(x + y)
{
...
return x + y;
}

8.8编程练习 有时间就做


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值