👦个人主页:@Weraphael
✍🏻作者简介:目前学习C++和算法
✈️专栏:C++航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨
前言
本章是补充
C
语言语法的不足,以及C++
是如何对C
语言设计不合理的地方进行优化的。
一、缺省参数的概念
缺省参数是 声明或定义函数 时为函数的 形参指定一个缺省值(默认参数)。
如上所示:在调用该函数
Func
时,如果没有指定实参,则采用该形参的缺省值;否则使用指定的实参。
二、缺省参数的分类
2.1 全缺省参数
顾名思义,就是函数所有的形参都给缺省值。
2.2 半缺省参数
半缺省就是部分形参给定缺省值。
2.3 几个需要注意的点
- 缺省参数必须从 右往左依次来给出,不能间隔给,因为实参是从左向右传给形参的。如下图所示,由于函数
func
第三个参数没有缺省值,导致func(1, 2)
没有实值传给形参c
,因而报错。
- 缺省参数不能在函数声明和定义中同时出现
- 为什么声明和定义不能同时缺省呢?
原因是:如果定义和声明的缺省值不同,那编译器就无法确定到底该用那个缺省值。
- 那么问题又来了,是定义给缺省值还是声明给缺省值呢?
声明给缺省值。原因是:因为代码在预处理阶段,头文件test.h
就会在test.cpp
文件中展开,然后在编译阶段就会进行语法检查,如果函数声明没有缺省值,就会报错。
- 缺省值必须是常量或者全局变量
三、缺省参数的用途
可能会在一些初始化函数中有比较大的用途
假设现在要初始化一个动态的栈,如下图所示
正常的话我们可以写出以上的代码。但是如果现在我明确要插入1000个数据,但是以上代码会导致每次都要扩容(规定一开始的容量为4),效率也就不高。那有的人想,既然我知道要插入1000个数据,也就可以写出以下代码
以上代码就完美解决了扩容的消耗。但是在平时写代码时,我们怎么可能明确知道要插入多少数据。有的人想,我可以让
DefaultCapacity
大一点,但是给大了会导致内存空间的浪费,给小了又要扩容。因此,就可以使用缺省参数来解决部分的问题
虽然缺省参数这种方法解决了空间浪费的问题,但还会存在一些扩容的消耗。但是扩容的消耗往往会比浪费空间好的多。
五、总结
缺省参数是指在定义函数时给某个参数设置一个默认值,当函数被调用时,如果没有传递该参数,就会使用默认值。缺省参数可以简化函数的调用,避免繁琐的参数传递过程,同时也提高了函数的灵活性。