默认参数只能按从右到左的顺序(不能跳着写),原因是函数传值的顺序是从左到右
int sum(int a, int b, int c = 10, int d = 10); int sum(int a, int b = 10, int c, int d = 10);//错误,不能跳着设置默认值 int sum(int a = 10, int b = 10, int c, int d);//错误,只能从最右开始设置默认值
当函数声明和定义分开时,定义里面不能写默认值,声明中有就行了。(不然会导致默认参数被重复定义)
#include <iostream> int sum(int a, int b, int c = 10, int d = 10); int main(void) { sum(10, 20); sum(10, 20, 30); sum(10, 20, 30, 40); return 0; } int sum(int a, int b, int c, int d) { return a + b + c + d; }
另外,默认参数还可以是一个已初始化的变量(一般是全局变量)
int s = 20; int sum(int a, int b, int c = s, int d = 10);
另外,函数重载可能会与默认参数冲突产生二义性。(这种情况,优先留下默认参数函数)
#include <iostream> int sum(int a, int b, int c = 10, int d = 10); int sum(int a, int b); int main(void) { sum(10, 20);//错误,不知道调用哪个函数 return 0; } int sum(int a, int b, int c, int d) { return a + b + c + d; } int sum(int a, int b) { return a + b; }