当前位置: 首页 > news >正文

【C++入门】缺省参数

目  录

  • 1 缺省参数
    • 1.1 缺省参数概念
    • 1.2 缺省参数分类
    • 1.3 缺省参数使用注意


1 缺省参数

1.1 缺省参数概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。 在调用该函数时,如果没有指定实参,则采用该形参的缺省值,否则使用指定的实参。

示例代码:

#include <iostream>

using namespace std;

void Func(int a = 0) {
	cout << a << endl;
}

int main() {
	Func();//没有传参时,使用参数的缺省值
	Func(10);//传参时,使用指定的实参
	return 0;
}

运行结果:

示例运行结果

如上所示:缺省参数的缺省值就好比一个一直存在的“备胎”。函数 Func 中含缺省参数 a ,其缺省值为0。在第一次调用函数时,我们没有传参,因此使用参数的缺省值进行输出;在第二次调用函数时,传入了常量值10,因此函数使用传入的参数值进行输出。


1.2 缺省参数分类

  • 全缺省参数

示例代码:

#include <iostream>

using namespace std;

void Func(int a = 10, int b = 20, int c = 30) {
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << endl;
}

int main() {
	Func(1, 2, 3);
	Func(1, 2);
	Func(1);
	Func();
	return 0;
}

运行结果:

示例运行结果

说明: 所谓全缺省参数,顾名思义就是函数的所有参数都具有缺省值。如示例中所示,若采用全缺省参数,函数调用时,可以选择传全部参数,可以选择传部分参数,也可以不传参使用参数缺省值。但注意:调用函数时必须从左往右连续给缺省参数传参,不能间隔传参(或者说必须从右往左连续使用缺省值),如 Func(, 2,) 与 Func(, , 3) 的调用方法都是错误的。

  • 半缺省参数(部分缺省)

示例代码:

#include <iostream>

using namespace std;

void Func(int a, int b = 20, int c = 30) {
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << endl;
}

int main() {
	Func(1, 2, 3);
	Func(1, 2);
	Func(1);
	return 0;
}

运行结果:

示例运行结果

说明: 所谓半缺省,并不是指给一半的参数设置缺省值,实际是只给部分参数设置缺省值。如示例中所示,函数 Func 中除了参数 a ,其余参数均设置有缺省值,此时调用函数,对于没设置缺省值的参数,必须进行传参,其余参数可使用缺省值。需要注意的是:同样,对于半缺省的参数,调用函数时也必须从右往左连续使用缺省值。且在声明和定义函数时也必须从右往左连续设置缺省参数的缺省值,如 void Func(int a = 10, int b, int c = 30); 的函数声明方法就是错误的。


1.3 缺省参数使用注意

  1. 缺省参数不能在函数声明和定义中同时出现

如:在test.h中声明函数 void Func(int a = 10, int b = 20, int c = 30); ,在test.cpp中定义函数 void Func(int a = 10, int b = 20, int c = 30){} ,运行时将会出现如下图中的报错,即使函数的声明和定义设置的缺省参数的缺省值是一样。而且如果二者可以同时出现的话,若恰巧两个位置提供的缺省值不同,那编译器就无法确定到底该用哪个缺省值。

错误说明

考虑到我们的代码中包含的 .h 头文件中通常是函数的声明,如果函数的声明和定义不在同一个文件中,则应在函数声明时设置缺省参数的缺省值,定义的时候则不需要再重复设置了。

  1. 缺省值必须是常量或者全局变量

  2. C语言的编译器不支持缺省参数


以上是我对C++中缺省参数的一些学习记录总结,如有错误,希望大家帮忙指正,也欢迎大家给予建议和讨论,谢谢!

相关文章:

  • 【34】C语言 | 动态内存管理
  • QT入门Buttons之QToolButton
  • 小程序开发常见问题总结(超实用)
  • LCX端⼝转发
  • 数据分析:SQL和Python
  • 蓝桥杯重点(C/C++)(随时更新,更新时间:2023.1.31)
  • 本地Exchange备份方案
  • linux安装docker
  • 【K8S系列】Pod重启策略及重启可能原因
  • 【Linux】冯诺依曼体系结构
  • vue使用echarts画可视化大屏
  • docker 高级篇
  • 【进击的算法】动态规划——01背包
  • 实验8-动态规划与背包问题
  • docker安装mongdb
  • 23.1.29 make menuconfig执行过程
  • 实现简单的栈与队列
  • 数据存储:MySQL之多表连接方式
  • 20篇高质量程序人生文章分享,做开发不仅仅只有代码
  • 连续函数的运算与初等函数的连续性——“高等数学”