【读书笔记:C++ primer plus 第六版 中文版】第8章 函数探幽

转载请注明出处:http://blog.csdn.net/enyusmile/article/details/46605337

本章内容包括:

  • 内联函数
  • 应用变量
  • 如何按引用传递函数参数
  • 默认参数
  • 函数重载
  • 函数模板
  • 函数模板具体化

8.1 C++内联函数

  • 常规函数和内联函数之间的主要区别不在于编写方式,而在于C++编译器如何将它们组合到程序中.
  • 内联函数的编译代码与其他程序代码”内联”起来了.编译器将使用相应的函数代码替换函数调用.内联函数的运行速度比常规函数稍快,但代价是需要占用更多内存.所以应该有选择的使用内联函数.
  • 要是用这项特性,必须采取下述措施之一:
    1. 在函数声明前加上关键字inline
    2. 在函数定义前加上关键字inline
  • 通常的做法是省略原型,将整个定义(即函数头和所有函数代码)放在本应提供原型的地方.
  • 程序员请求将函数作为内联函数时,(有些)编译器不一定会满足这种要求.过大或调用自己,内联函数不能递归.
  • 程序清单8.1 inline.cpp
    • 尽管程序没有提供独立的原型,但C++原型特性仍在起作用.这是因为在函数首次使用前出现的整个函数定义充当了原型.
  • 内联与宏:inline工具是C++新增的特性.C语言使用预处理器语句#define来提供宏–内联代码的原始实现.宏不能按值传递.需要指出的是,如果使用C语言的宏执行了类似函数的功能,应考虑将他们转换为C++内联函数.

8.2 引用变量

  • 引用变量的主要用途是用作函数的形参.通过将引用变量用作参数,函数将使用原始数据,而不是其副本.

8.2.1 创建引用变量

  • C和C++使用&符号来指示变量的地址.C++给&符号赋予了另一个含义,将其用来声明引用.
int rats;
int & reodents = rats;
  • 程序清单8.2 firstref.cpp
  • 注意:必须在声明引用变量时进行初始化.
  • 引用更接近const指针,必须在创建时进行初始化,一旦与某个变量关联起来,就将一直效忠于它.
  • 程序清单8.3 sceref.cpp

8.2.2 将引用用作函数参数

  • 程序清单8.4 swaps.cpp

8.2.3 引用的属性和特别之处

  • 程序清单8.5 cubes.cpp
  • 如果程序员的意图是让函数使用传递给它的信息,而不对这些信息进行修改,同时又想使用引用,则应使用常量引用.如果这样做,当编译器发现代码修改了方法里的值时,将生成错误消息.
  • 临时变量,应用参数和const:如果实参与引用参数不匹配,C++将生成临时变量.
  • 如果引用参数是const,则编译器将在下面两种情况下生成临时变量:
    • 实参的类型正确,但不是左值;
    • 实参的类型不正确,但可以转换为正确的类型.
  • 如果接受引用参数的函数和意图是修改作为参数传递的变量,则创建临时变量将阻止这种意图的实现.解决方法是,禁止创建临时变量,现在的C++标准正是这样做的(然而,在默认情况下,有些编译器仍将发出警告,而不是错误消息,因此如果看到了有关临时变量的警告,请不要忽略).
  • 注意:如果函数调用的参数不是左值或与相应的const引用参数的类型不匹配,则C++将创建类型正确的匿名变量,将函数调用的参数的值传递给该匿名变量,并让参数来引用该变量.
  • 应尽可能使用const:将引用参数声明为常量数据的引用的理由有三个:
    1. 使用const可以避免无意中修改数据的编程错误.
    2. 使用const使函数能够处理const和非const实参,否则将只能接受非const数据.
    3. 使用const引用使函数能够正确生成并使用临时变量.
  • C++11新增了另一种引用—右值引用.这种引用可指向右值,是使用&&声明的.主要目的是,让库设计人员能够提供有些操作的更有效实现.以前的引用(使用&声明的引用)现在称为左值引用.

8.2.4 将引用用于结构

  • 程序清单8.6 strt_ref.cpp
    1. 程序说明
    2. 为何要返回引用
      • 注意:返回引用的函数实际上是被引用的变量的别名.
    3. 返回引用时需要注意的问题
      • 应避免返回函数终止时不再存在的内存单元引用.
    4. 为何将const用于引用返回类型

8.2.5 将引用用于类对象

  • 将类对象传递给函数时,C++通常的做法是使用引用.
  • 程序清单8.7 strquote.cpp

8.2.6 对象,继承和引用

  • 程序清单 filefunct.cpp
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值