C++Primer学习笔记12.14

139 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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语句