函数重载以参数类型和参数个数不同区分。如:1
2
3
4int add(int m1, int m2);
int add(int m1, int m2, int m3);
int add(int m1, int m2, int m3, int m4);
int add(char m1, char m2);
以上程序大家都没有什么疑惑。那么下面的程序呢?1
2
3
4int add(int m1, int m2);
int add(int m1, int m2, int m3);
int add(int m1, int m2, int m3, int m4 = 0);
int add(char m1, char m2);
看着也无大问题,但是编译却会报错
原因在于C++中有了默认参数后4个int参数的方法相当于1
2
3
4int add(int m1, int m2, int m3, int m4 = 0);
int add(int m1, int m2, int m3){
int m4(0);
}
所以再定义一个int (int m1, int m2, int m3)已经造成了歧义。
由此设置默认参数需要注意2点
- 只能由后往前
- 不能对少于参数个数的函数进行重载