函数重载 · 同名不同参 · 编译期按实参选版本
三个同名 add 靠参数列表区分 编译器在编译期把每次调用「绑定」到唯一匹配的版本
一组同名函数(重载集)
int add(
int
a,
int
b)
_Z3addii
double add(
double
a,
double
b)
_Z3adddd
int add(
int
a,
int
b,
int
c)
_Z3addiii
编译器为每个版本起不同内部名(name mangling)
程序里的调用
add(
3
,
4
)
实参:int, int
add(
2.5
,
1.5
)
实参:double, double
↘ 绑定到 add(int, int)
↗ 绑定到 add(double, double)
靠参数列表(个数 / 类型 / 顺序)区分
不能只靠返回值类型区分重载
编译期(静态)绑定
按实参与形参匹配,在编译时就选定版本
同名是为了好用,分派由编译器在编译期完成
▶ 重播