当前位置: 首页> 汽车> 维修 > 合肥seo推广排名_线上商城模板_网页模板大全_网络营销师证书需要多少钱

合肥seo推广排名_线上商城模板_网页模板大全_网络营销师证书需要多少钱

时间:2025/7/9 12:59:53来源:https://blog.csdn.net/weixin_50502862/article/details/144495381 浏览次数: 0次
合肥seo推广排名_线上商城模板_网页模板大全_网络营销师证书需要多少钱

   C++ 表情包趣味教程 👉 《C++要笑着学》

目录

0x00 引入:如果我不想传参呢?

0x01 缺省参数的概念

0x02 缺省参数的用法

0x03 全缺省参数

0x04 探讨:参数传递特性

0x05 半缺省参数 

0x05 缺省参数的应用场景


0x00 引入:如果我不想传参呢?

下面这是一个简单的函数,功能就是打印出传递过来的数字:

#include <iostream>
using namespace std;void Func (int a) 
{cout << a << endl;
}int main(void) {Func(1);      // 传参 1-> areturn 0;
}

🚩 运行结果: 1

这种操作自然是很正常的,Func(1) 传参 1,然后 Func 函数接收到 1,毋庸置疑地打印出 1。

❓ 但是 —— 如果我不想传参呢?我想直接调用 Func 函数:

#include <iostream>
using namespace std;void Func(int a) 
{cout << a << endl;
}int main(void) {Func();        // 我不传参,会怎么样?return 0;
}

🚩 运行结果:(报错)

因为没有传递参数,所以自然会引发报错,不过……

在 C++ 里我们可以利用一个叫 "缺省参数" 的玩意,让函数做到不传参也能运行的效果!

缺省参数 (Default Args) ,名字翻译的是非常难以理解,正经得不得了。

其实说人话就是 "默认参数",它 可以给一个形参设置一个默认值。

💬 代码演示:如何使用缺省参数

#include <iostream>
using namespace std;void Func(int a = 10) 
{cout << a << endl;
}int main(void) {Func();  return 0;
}

🚩 运行结果:(成功)

 居然还能这么玩?下面我们就将学习这个神奇的 "缺省参数" 。

0x01 缺省参数的概念

"神奇的 C++ 提供了缺省参数"

❓ 缺省参数,缺省……什么是缺省参数?

 说人话就是 —— 默认参数!!!

📚 缺省参数:声明函数或定义函数时为函数的参数指定一个默认值。

该函数在调用时,如果没有指定实参,则采用该默认值;否则使用指定的实参。

简单来说就是:传参了就用传来的值,没传参就用默认值。

为什么叫缺醒,而不叫默认?


首先,缺省本身没有任何意义,就是为了直译翻译英文 "default"  而创造的词语。

缺省,即系统默认状态,意思与 "默认" 相同。"缺省" 最初来源于计算机英文文档中的单词 default,default 有很多意思:违约、缺省、拖欠、默认,由于当时计算机方面的翻译水平不高,于是就把这个词直译成了“缺省”,其实应该取它的引申意思“默认”。

后来的人们发现,无论怎么解释,缺省好像都说不通,但是由于之前的人们已经习惯了 "缺省" 这个用法,故依旧延续了这个说法。值得一提的是,简中翻译为 缺省值,繁中翻译叫 "預設值",个人认为后者更容易理解。

0x02 缺省参数的用法

我们先来看下面这段代码:

#include <iostream>
using namespace std;void Func(int a = 0) {     // 缺省值作为形参,传给 acout << a << endl;
}int main(void)
{Func(10);   // 传参时:使用指定的实参(传入10)Func();     // 没有传参时,使用默认的参数值(默认值:0)。return 0;
}

🚩 运行结果如下:

下面我来画一张图来为大家解释缺省参数的精髓:

  • 第一次调用 Func 时,指定了实参,就会照常传入,这里指定的是 10,所以传过去的是 10
  • 第二次调用 Func 时,并没有指定实参,所以进入函数后,形参 a 会取缺省值 0 作为参数的值。
  • 因此,第一次打印的结果是 10,第二次打印的结果是 0

📌 注意事项:

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

缺省参数 C++ 里面的,C 语言不支持(编译器不支持)

声明不能在 .h 和 .cpp 里同时出现缺省参数,缺省参数要么申明里写,要么在定义里写!

缺省参数又分为 全缺省参数 (Full Default args) 和 半缺省参数 (Half Default agrs) 。

全缺省参数:函数中的所有参数都给了缺省值。

半缺省参数:函数中的所有参数从右往左给一部分的缺省值。

 下面我们就来逐个介绍它们!

0x03 全缺省参数

必须所有参数都带有缺省值,才能叫作全缺省参数。

💬 代码演示:全缺省参数

#include <iostream>
using namespace std;void Func(int a = 10, int b = 20, int c = 30) {printf("%d %d %d\n", a, b, c);
}int main(void)
{Func();           // 不穿,一个都没传Func(1);          // 只传了一个Func(1, 2);       // 传了两个,但没完全传Func(1, 2, 3);    // 全都传了,就没缺省参数什么事了return 0;
}

🚩 运行结果如下:

🔑 解析:

  • 第一次调用 Func 时,什么都没有传,所以结果直接就采用默认值。
  • 第二次调用 Func 时,只传了一个参数,那么结果只有 a 不是默认值。
  • 第三次调用 Func 时,传了两个参数,那么结果只有 c 会是默认值了。
  • 最后一次调用 Func 时,所有参数都传了,那么结果都不会是默认值。

0x04 探讨:参数传递特性

#include <iostream>
using namespace std;void Func(int a = 10, int b = 20, int c = 30) {printf("%d %d %d\n", a, b, c);
}int main(void)
{Func(, 2,);return 0;
}

❌ 不可以!只传 b 不好传!参数的传递按照语法是从左往右传递的,

因为这是语法定死的,所以是没有办法传的!

 其实也并不是那么绝对的!因为在 C++11 以后加了包装器 (wrapper) 。

用那个是可以支持只传中间那个的,但是那个比较复杂,不适合在这里讲。

0x05 半缺省参数 

📚 半缺省参数:函数中的所有参数从右往左连续地缺省一部分

这一部分可以是多个参数,也可以是一个参数 (一个也算一部分) ,但是它们必须是 "连续地" 。

参数传递顺序根据根据函数调用约定,但值得注意的是:

  • 半缺省并不是缺省一半,而是缺省一部分。
  • 半缺省参数必须从右往左缺省,且必须是连续地。即,必须从右往左连续缺省。

这是规定!这是大佬规定的!不服?

吐槽:既然不是缺省一半,还叫半缺省参数,这合理吗?这不合理!

 这个 "半" 字确实用的不合理,倒不如叫 "部分缺省参数" ,会显得更加合理一些!

💬 代码演示:

#include <iostream>
using namespace std;//                     👈 从左往右 "连续地"
void Func(int a, int b, int c = 30) {printf("%d %d %d\n", a, b, c);
}
/* 半缺省:从右往左连续地缺省一部分参数a - 必须传 (因为没缺省)b - 必须传 (因为没缺省)c - 可传可不传 (因为缺省了)
*/int main(void)
{Func(1, 2);     // a b 没缺省,所以必须要传,c缺省了所以可以不传Func(1, 2, 3);  // 都传return 0;
}

🚩 运行结果如下:

📜 建议:既然大佬是这么设计的,那我们也没办法,所以 为了迎合这个特性,

设计函数的时候如果有参数是必须要传递的,就放到前面;

不是必须要传的,可以放到后面(制作成缺省参数)。

 (大佬所言极是,小弟定当言听计从)

0x05 缺省参数的应用场景

缺省参数的运用场景有很多,我们随便举个例子。

我们在学习数据结构时,实现顺序表、栈时定义容量 capacity 时,

默认值我们当时推荐的是给 4,这里就可以设置缺省值:

💬 代码演示:(仅展示部分代码)

typedef struct Stack {int* array;int top;int capacity;
} Stack;void StackInit (Stack* pst,  int capacity = 4  // 设置缺省值为4(默认容量为4)) 
{pst->array = (int*)malloc(sizeof(int) * capacity);pst->top = 0;pst->capacity = capacity;
}int main()
{Stack st;StackInit(&st);   // 不知道栈最多存多少数据,就用缺省值初始化StackInit(&st, 100);   // 知道栈最多存100数据,显示传值。这样可以减少增容次数。return 0;
}

 这么一来,就不需要考虑增容的概念了,这就是缺省参数的好处。

所以,这个特性确实是很有用的,可以让我们更方便!


📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2022.
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

C++reference[EB/OL]. []. http://www.cplusplus.com/reference/.

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

比特科技. C++[EB/OL]. 2021[2021.8.31]. 

关键字:合肥seo推广排名_线上商城模板_网页模板大全_网络营销师证书需要多少钱

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: