开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情
6.4 函数重载
如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载函数。不允许两个函数除了返回类型外其他所有的要素都相同。
重载和const形参
一个拥有顶层const的形参无法和另一个没有顶层const的形参区分开来
int f(Phone);
int f(const Phone); //重复声明了int f(Phone);
int f(Phone*);
int f(Phone* const); //重复声明了int f(Phone*);
int f(Phone&);
int f(const Phone&); //新函数,作用于常量引用
int f(Phone*);
int f(const Phone*); //新函数,作用于指向常量的指针
编译器可以通过实参是否是常量来推断应该调用哪个函数。
const_cast和重载
const_cast的目的是重载
调用重载函数时有三种可能:最佳匹配、误匹配、二义性调用
6.4.1 重载于作用域
如果我们再内层作用域中声明名字,它将隐藏外层作用域中声明的同名实体。
6.5 特殊用途语言特性
6.5.1 默认实参
一旦某个形参被赋予了默认值,它后面的所有形参就必须有默认值
当设计含有默认实参的函数时,其中一项任务是合理设置形参的顺序,尽量让不怎么使用默认值的形参出现在前面,而让使用默认值的形参出现在后面。另外,函数的后续声明只能为之前那些没有默认值的形参添加默认实参,而且该形参右侧的所有形参都必须有默认值。
6.5.2 内联函数和constexpr函数
将函数指定为内联函数,通常就是将它在每个调用点上“内联地”展开。一般来说,内联机制用于优化规模小、流程直接、频繁调用地函数。
constexpr函数是指能用于常量表达式(不一定必须是常量表达式)的函数。函数的返回类型及所有形参的类型都得是字面值类型,而且函数中必须有且只有一条return语句