6.1 函数基础
6.1.1 局部对象
6.1.2 函数声明
6.1.3 分离式编译
编译和链接多个源文件
6.2 参数传递
6.2.1 传值参数
指针形参
6.2.2 传引用参数
使用引用避免拷贝
拷贝效率低或者有的类类型不支持拷贝
使用引用形参返回额外信息
一个函数只能返回一个值,引用形参可以返回多个结果
6.2.3 const形参和实参
当形参又顶层const时,传给他const或者非const都是可以的
指针或引用形参与const
尽量使用常量引用
把函数不会改变的形参定义成引用是一种常见的错误,这么做会给函数的调用者一种舞蹈,即函数可以修改它的实参的值。
6.2.4 数组形参
因为数组是以指针的形式传递给函数的,所以一开始函数并不知道数组的确切尺寸,函数的调用者应该为此提供一些额外的信息。
使用标记指定数组长度
C风格字符串末尾有空字符作为标记
使用标准库规范
传入指向数组首元素和尾元素的指针
显示传递一个表示数组大小的形参
数组形参和const
数组引用形参
传递多维数组
6.2.5 main:处理命令行选项
6.2.6 含有可变形参的函数
initializer_list形参
用于函数实参数量未知,但是全部实参的类型都相同,其是一种标准库类型。
initializer_list 对象中的值永远是常量值,我们无法改变,这与vector不同
含有initializer_list形参的函数也可以同时拥有其它形参:
省略符形参
6.3 返回类型和return语句
6.3.1 无返回值函数
6.3.2 有返回值函数
值是如何被返回的
不要返回局部对象的引用或指针
返回类类型的函数和调用运算符
引用返回左值
列表初始化返回值
主函数main的返回值
递归
6.3.3 返回数组指针
因为数组不能拷贝,所以函数不能返回数组,但可返回数组的指针或引用
声明一个返回数组指针的函数
使用尾置返回类型
使用decltype
6.4 函数重载
定义重载函数
判断两个形参的类型是否相异
重载和const形参
const_cast和重载
调用重载的函数
6.4.1 重载与作用域
6.5 特殊用途语言特性
6.5.1 默认实参
使用默认实参调用函数
如果我们想使用默认实参,只要在调用函数的时候省略该实参就可以了
默认实参声明
默认实参初始值
6.5.2 内联函数和constexpr函数
内联函数可避免函数调用的开销
constexpr函数
指能用于产量表达式的函数
内联函数和constexpr函数放在头文件内
6.5.3 调试帮助
assert预处理宏
NDEBUG预处理变量
6.6 函数匹配
确定候选函数和可行函数
寻找最佳匹配
含有多个形参的函数匹配
6.6.1 实参类型转换
6.7 函数指针
函数指针指向某种特定类型,函数累心由它的返回类型和形参共同决定,与函数名无关。
使用函数指针
重载函数的指针
编译器通过指针累心决定选用哪个函数,指针类型必须与 重载函数中的某一个精确匹配
函数指针形参
返回指向函数的指针
和数组类似,虽然不能返回一个函数,但是能返回指向函数类型的指针。
将auto和decltype用于函数指针类型