在定义形参时,尽量使用常量引用(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
函数放在头文件中。
要避免函数调用的二义性问题,在重载时要考虑到可能的类型转换,特别是在参数大于 1 时,要尤为注意。在存在两种转换可能时也会产生二义性。(P.220)