函数重载
对于函数重载,关键在于编译器能够明确确认,对于重载函数的各种参数情况下的调用,都能够确定是要调用同名函数中的哪一个,不会产生二义性。
对于重载函数,应该在形参类型和形参数目上有所不同。
第一点为是一种概括的说法,当涉及到下面几点时有时会犯糊涂。不允许两个函数除了返回类型不同,其他要素都相同。
比如 int fun() 和 float fun()
顶层const不影响传入函数的对象,所以仅仅是顶层const不同,不能函数重载
比如: void f(const int i) 和 void f(int i), 对于 int i = 100 或者 const int i = 100 调用 f(i) 都是有二义性的,所以是不能重载的。
底层const影响传入函数的对象,所以能够函数重载。
比如:void f(const int* p) 和 void f(int* p) 是函数重载 void f(const int& p) 和 void f(int& p) 是函数重载 void A::f(int i) 和 void A::f(int i) const 是函数重载(const 修饰this 参数,是底层const)
注意一下几个容易犯错的地方
5.1假设定义了 int f() 和 int f(int a= 0) 那么在 某处调用 f()的时候,会有歧义。