章节回顾
- 函数重载允许在同一作用域内定义多个同名函数,只要它们的参数表不同。
- 编译器通过重载决议根据实参匹配最佳函数。
- 重载区分仅考虑:函数名、形参个数、形参类型及成员函数限定符;返回类型不参与区分。
- 默认实参为形参提供默认值,调用时可省略;所有后续形参必须同样拥有默认值。
- 函数模板使用占位类型(模板形参)生成可适用于任意类型的函数,避免重复代码。
- 模板实参可由编译器推导或显式指定。
- 模板定义应放在头文件中,以便在多个源文件中使用。
- 非类型模板形参接受
constexpr
值,用于需在编译期已知常量的场景。
测验
问题 1
下列代码能否通过编译?若不能,原因是什么?
int add(int x, int y);
double add(int x, int y);
问题 2
修正下述程序,使其能通过编译并输出 4:
#include <iostream>
template <typename T>
T twice(T x);
int main()
{
std::cout << twice(2) << '\n';
return 0;
}
(参考答案略)