【从 C 向 C++ 进阶】- 对 C 的语法扩展 - 默认参数

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++ 进阶系列博文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值