初写 -----> C++ ---> 入门_02
标签: 初写 -----> C++ ---> 入门_02 C/C++博客 51CTO博客
2023-04-30 18:24:07 213浏览
各位朋友们,欢迎来到本期博文 !本期继续推进 C++入门环节 !
----------------------------------------------------------------------------------------------------------------------
1. 缺省参数
------> 缺省参数 是声明或定义函数时 为函数指定一个缺省值 。在调用该函数时, 如果没有指定实参则采用该形参的缺省值,否则使用指定的实参 !

显然函数传参时候,若没有指定实参,则使用参数默认值 !
(1)缺省参数分类 :> 全缺省 半缺省
i. 半缺省参数必须从右往左依次给出,不能间隔着给
---> a. 半缺省

---> b. 全缺省

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

以上是本期 缺省参数的讲解 !下面开始转战,函数重载 !
2. 函数重载
何为 函数重载 ?
------>函数重载是函数一种的特殊情况, C++ 允许同一个作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或者 类型 或者 类型顺序)不同,常用来处理实现 功能类似 数据类型不同的问题 !
(1)函数重载 ---> 参数类型不同

(2)函数重载 ---> 参数个数不同

(3)函数重载 ---> 参数类型顺序不同

请注意 :> 引用类型 必须同 引用实体 是相同类型 !
3. 引用
------> 引用不是新定义一个变量,而是给已经存在的变量取一个别名(稍后解释,何为别名),编译器不会为引用变量开辟内存空间,该变量 和 该变量的引用变量 公用同一块空间 !

------> 何为别名 ?---> 其实别名就是 “外号”,其本质还是原先的变量,只不过是换了一个叫法而已 !!
虽然 更换了变量叫法,但是 “引用” 的引入,完成了许多变革 !而且 引用 运用在一些场景中更加便捷 !至于那些变革,未来的一段很长时间,会慢慢进行讲解 !
下面 继续推进,模块 :>
(1)引用特性
---> a. 引用必须初始化


---> c. 引用过程,权限可以平移或缩小

--> 引用权限不能扩大
(1)同种类型引用

(2)不同种类型引用

至于上述修改为何成功,值得探讨 !有意思的点,可是来了 !?
--> 现附上示意图:>

--> 下面是 不涉及权限放大的拷贝过程

--> 下面再来看一组,函数返回值中权限的探讨

至于修改成功的原因,还是直接上手示意图,会有更好的观感,如下 :>

小总结:传值返回,会生成临时变量,具有常性;而引用返回,不会生成临时变量 。
以上,涉及到,临时变量的生成 ! 那么该如何证明,确是生成了临时变量呢?
现 附上证明过程 :>

---> d. 引用一旦引用了一个实体,就不能再引用其他实体 !否则,会出现 “重定义:多次初始化” 的字样 !

---> e. 引用过程,无论是传参,还是做返回值 ,都不会开辟临时空间 !因此,减少了拷贝,提升了效率 !
---> f. 引用做返回值,可以读取返回值,进而能够进行修改 !
--->(fm)使用引用, 对静态顺序表进行修改

--->(fn)不用引用, 对静态顺序表进行修改

经发现,运用引用之后,程序极大地简化了!其实,使用引用进行修改返回值的做法,是相当香的 !可以说,等用习惯了引用之后,或许就不再想用指针了 !?
------> 特性大总结 :>
a. 引用必须初始化 ;
b. 一个变量可以有多个引用 ;
c. 引用过程,权限可以平移或缩小 ;
d. 引用一旦引用了一个实体,就不能再引用其他实体 !否则,会出现 “重定义:多次初始化” 的字样 ;
e. 引用过程,无论是传参,还是做返回值 ,都不会开辟临时空间 !因此,减少了拷贝,提升了效率 ;
f. 引用做返回值,可以读取返回值,进而能够进行修改 !
(2)常引用

(3)使用场景
-----> a. 做参数

-----> b. 做返回值
引用做返回值是相当危险的,会存在值覆盖的情况,如下所示 :>

为了方便大家理解,特附上流程过程示意图:>

由于篇幅视图限制,特再一次 论述一遍,上述蓝色方框内的解析 !
------> 解析 :>
Count 函数运行结束后,该函数对应的栈区空间就被回收了,即变量 c 就没有了意义 !
在 main()函数中, ret 引用 Count 函数返回值。实际上,引用的是一块已经释放过的空间 !
为了,加强论述的严谨性与科学性,现附上调试流程示意图 :>

此后,第二次调用 Count()函数 !虽然空间被回收了,但是空间本身还在那里,只是暂时放在那儿,不先用而已
而 ret 引用的 c 位置会被修改成 数值 8,从而 ret 值就改变了 !
现附上调试流程示意图 :>

以上就是,论述与调试证明过程了 !现对以上内容略作简要总结 :>

上述流程讲解,用引用做返回值很危险。其实,上述的底层逻辑,类似野指针的访问 !
现推出,正确示范样例,用不在栈区内的静态区,就可以了 !
如下 :>

上述静态区的运用,不会再出现 警告 “返回局部变量或临时变量的地址 ” !
另外,特别讲述一下,静态区运行结果 :>

其实,上述结果 很容易理解 !由于静态区的引入,第一次调用 Count 函数结束后,处于静态区的 变量 c 就不能再被修改了 !“static” 具有常量固定属性,这在 C 语言学习阶段就提到过了 !而 静态区, 不在栈区内 !
至此,引用 做返回值就讲解完成了 !其实,引用涵盖的知识点,还是比较广的,也有些深度 !
下一期,将对 传值 与 引用的效率进行比较 !希望本期内容,对大家有所帮助 ! 感谢阅读 !!??
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论
您可能感兴趣的博客
