当先锋百科网

首页 1 2 3 4 5 6 7

1. 函数的默认参数

在 C++ 中可以在函数声明时为参数提供一个默认值,当函数调用时没有提供参数的值时,则使用默认值。当函数的声明与实现分开时,函数的默认值只能在函数声明中指定,在函数实现中指定是无效的,且同时指定时会发生编译错误。

  • 实验:
// void fun_B(int num = 0);		// error: default argument given for parameter 1 of ‘void fun_B(int)’ [-fpermissive]
void fun_B(int num);
void fun_C(int num = 0);

void fun_A(int num = 0)
{
	cout << "num = " << num << endl;
}

int main()
{
    fun_A(1);					// num = 1
	fun_A();					// num = 0
	
	fun_B(1);					// num = 1
	// fun_B();					// error: too few arguments to function ‘void fun_B(int)’
	
	fun_C(1);					// num = 1
	fun_C();					// num = 0
}

void fun_B(int num = 0)
{
	cout << "num = " << num << endl;
}

void fun_C(int num)
{
	cout << "num = " << num << endl;
}

2. 多默认参数

函数的多个参数需要设置默认值时,需要遵循以下规则:

  • 参数的默认值必须从右向左提供。
  • 函数调用时使用了默认值,则后续参数必须使用默认值。
  • 实验:
// void fun(int num_A = 0, int num_B, int num_C = 0);	// error: default argument missing for parameter 2 of ‘void fun(int, int, int)’
void fun(int num_A, int num_B = 0, int num_C = 0);

int main()
{
    // fun();				// error: too few arguments to function ‘void fun(int, int, int)’
	fun(1);					// num_A = 1, num_B = 0, num_C = 0
	fun(1, 2);				// num_A = 1, num_B = 2, num_C = 0
	fun(1, 2, 3);			// num_A = 1, num_B = 2, num_C = 3
	// fun(1, ,2);			// error: expected primary-expression before ‘,’ token
}

void fun(int num_A, int num_B, int num_C)
{
	cout << "num_A = " << num_A
		<< ", num_B = " << num_B
		<< ", num_C = " << num_C << endl;
}

3. 空参数

在 C 中,void fun(void)void fun() 的含义是不同的,前者表示不接收任何参数,后者表示函数可以接收任意个数的任意参数。

在 C++ 中,参数为空与参数为 void 均表示不接收任何参数。


4. 占位参数

在 C++ 中可以为函数提供占位参数。占位参数只有参数类型声明,而没有参数名声明;在一般情况下,在函数体内部无法使用占位参数。

占位参数的意义在于与默认参数结合起来使用,兼容 C 语言程序中函数参数为空的情形。

  • 实验:
void fun(int num_A, int num_B = 0, int = 0);

int main()
{
	fun(1);					// num_A = 1, num_B = 0
	fun(1, 2);				// num_A = 1, num_B = 2
	fun(1, 2, 3);			// num_A = 1, num_B = 2
}

void fun(int num_A, int num_B, int)
{
	cout << "num_A = " << num_A
		<< ", num_B = " << num_B << endl;
}

更多从 C 向 C++ 进阶系列博文