参数传递

在定义形参时,尽量使用常量引用(const data_type &name)会带来更多优势。

数组形参

注意到 void print(const int*)void print(const int[]) 是等价的,所以对于后者,传入 int * 类型的变量也是可以的。

为了防止越界,一般采用头尾指针传递的方式传递数组,此种方式为标准库规范。

数组引用的大小是有效的,例如 void print (&arr)[10] 其传入值必须是大小为 10 的数组。 而对于 void print(const int arr[10]) 则是无效的,其和上面提及的形式等价,即 void print(const int *arr)

返回值

函数的返回值也可以是左值,当其为引用(别名)时,它就可以充当左值。

重载与作用域

在内部声明的函数会覆盖掉所有的外部声明同名函数。

默认实参

默认实参应该放在函数声明中,即放在头文件中

默认实参初始值

如果尝试使用局部变量作为声明函数的实参初始值,那么通过修改局部变量再调用的方式来修改默认值。P.213

内联函数和 constexpr 函数

所谓内联指其内联展开,可以减少函数调用带来的性能损失。

内联关键字是向编译器的请求,编译器可以选择忽略。

通常会把内联函数和 constexpr 函数放在头文件中。

6.6 函数匹配

要避免函数调用的二义性问题,在重载时要考虑到可能的类型转换,特别是在参数大于 1 时,要尤为注意。在存在两种转换可能时也会产生二义性。(P.220)