C++ | 详细介绍缺省参数的作用

文章详细介绍了C++中的缺省参数概念和规则,包括全缺省参数和半缺省参数的使用,强调了从右往左连续给出缺省值的重要性。通过实例展示了不同参数传递方式,并分析了错误和正确用法。文章还讨论了缺省参数在实际应用中的价值,如在栈初始化中的应用,以及如何根据需求灵活使用缺省参数以避免资源浪费。

在这里插入图片描述

在这里插入图片描述

一、前言

1、缺省参数概念

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

  • 通俗点讲,就是在定义函数的时候可以给形参赋一个初始化的值,这个值就叫做缺省值,缺省值可以有一个,也可以有多个

2、缺省参数的使用规则

  1. 半缺省参数必须从右往左依次且连续来给出,不能间隔着给【实参和形参同理】
  • 可以通过下图先了解一下,下文我会详细介绍。可以看出对于形参中的缺省参数如果要给的话不可以随意给,要么从右往左给1个或者是2个,要么全部缺省,否则必须要连续。否则就不符合规定

在这里插入图片描述

  1. 缺省参数不能在函数声明和定义中同时出现
  • 可以看到,若是在声明和定义中同时给出函数的缺省参数,此时就会出现【重定义默认参数】的问题。下面我所给出的值是相同的,若是两边给出的值不同的话,编译器在编译的时候就会产生歧义,不知道使用那一块的参数

在这里插入图片描述

  • 一般我们会选择定义在声明处,因为声明处的头文件其他.cpp文件可以包含。若是将这些缺省参数放在放在了定义出,其他文件就没办法使用到了

在这里插入图片描述

  1. 缺省值必须是常量或者全局变量
  • 这一点很好理解,你给出的缺省值必须是一个固定的值,而不是一个可修改的变量,否则这个缺省值将毫无意义;对于缺省值一般我们不会使用全局变量,因为全局变量会存在线程安全的问题,日常写代码也是不推荐使用全局变量
  1. C语言不支持(编译器不支持)
  • 演示一下,创建了一个test.c的源文件的,然后和上面一样为这里的函数形参给到缺省值,接着去编译的话就可以发现是会出现很多错误的,这其实就可以看出C语言是不支持【缺省参数】的

在这里插入图片描述


因为对于缺省参数而言,虽然看上去很好理解,不过你真正去使用的话若是不注意会出现很多错误,了解了基本的概念和使用规则之后,接下去就让我们真正地去研究一下这个缺省参数

二、全缺省参数【备胎是如何使用的♿】

1、四种实参传递方式说明

  • 首先来看一下全缺省参数,对于全缺省参数而言全部的形参值都给上一个缺省值,也就像下面这样
void func(int a = 10, int b = 20, int c = 30)
{
   
   
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}
  • 然后我们便可以试着是去调用一下这个函数,因为有缺省参数的存在,可以不考虑传入全部的值,首先对于下面这种就是最常见的,那也就是传入所有的参数。【假设默认缺省值均为备胎,a为备胎1号,b为备胎2号,c为备胎3号】那么此时这样的传值是不需要备胎的
func(1, 2, 3);
  • 然后试着传入前两个实参试试,那此时最后一个使用的就是默认的缺省参数30,也就是备胎3号【今天晚上想看场电影,但是电影票有点贵,所以叫来备胎3号
func(1, 2);
  • 接下去试着只传入一个参数,那后面两个b和c使用的就是默认的缺省参数20和30【早饭自己家里吃,中午吃饭叫来备胎2号付钱,晚上和备胎3号吃完饭然后看电影
func(1);
  • 下面这种应该不用我说了,典型的绿茶🍵使用的都是三个缺省值10、20、30【早上让备胎一号早起帮忙买早饭,中午和备胎2号去高档餐厅吃饭,晚上和备胎3号去湖边约会
func();

来看一下运行结果。和我上面解释是一样的

在这里插入图片描述

2、疑难细究

  • 可以看出,刚才我都是执行【从右往左依次连续给出缺省值】的,但若是我像下面这样传递参数的话,虽然是规则对的,但语法是错误的
f
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烽起黎明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值