大家知道什么是备胎吗?
在网络用语中,备胎就是指一段感情中的替补、备选人。
实际上在C++中,函数的参数也可以配备胎。
在C语言中,没有缺省参数的概念,我们调用函数时必须要将实参传递给形参。
// C语言没有缺省参数
void func(int a)
{printf("%d\n", a);
}
int main()
{func(); // errorfunc(1); // 必须传参return 0;
}
而在C++的特定场景中,我们可以不传递参数,而使用默认指定的参数。
缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
void TestFunc(int a = 0)
{cout << a << endl;
}
int main()
{TestFunc(); // 没有传参时,使用参数的默认值TestFunc(10); // 传参时,使用指定的实参
}
所谓全缺省参数,就是将函数的所有参数都赋予缺省值。
void func(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}
int main()
{// 只有以下四种传参方式func();func(1); // 从左往右传func(1, 2);func(1, 2, 3);//func(, 2, ); // error,不能在调用的时候指定传给谁return 0;
}
所谓半缺省参数,就是缺省函数的部分参数。
// 缺省一个参数
void func(int a, int b, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}
int main()
{// 只有以下两种传参方式func(1, 2);func(1, 2, 3);return 0;
}
// 缺省两个参数
void func(int a, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}
int main()
{// 只有以下三种传参方式func(1);func(1, 2);func(1, 2, 3);return 0;
}
1、半缺省参数必须从右往左依次来给出,不能间隔着给
void func(int a = 10, int b, int c) // error
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}
void func(int a = 10, int b, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}
诸如上面半缺省参数的代码例子,均是错误写法。
2、缺省参数不能在函数声明和定义中同时出现
下面代码为错误写法:
// Test.h
extern void func(int a = 0); // 函数声明// Test.cpp
void func(int a = 0) // 函数定义
{cout << a << endl;
}
而以下两段代码为正确写法:
// Test.h
extern void func(int a = 0); // 函数声明// Test.cpp
void func(int a) // 函数定义
{cout << a << endl;
}
// Test.h
extern void func(int a); // 函数声明// Test.cpp
void func(int a = 0) // 函数定义
{cout << a << endl;
}
Note:推荐将缺省参数写在声明位置,因为查看函数如何使用时都是先看声明。
3、缺省值必须是常量或者全局变量