C++ 入门命名空间,缺省参数 函数重载与引用

简介

C语言很简练,但是还是有许多不足,所以 C++ 为了弥补这些不足增加了许多特性

命名空间

有这样一种情况,当 小 A 和小 B 为同一个程序写接口的时候,不小心有一些函数和变量重名了,在 C语言中这是不允许的,但是在 C++ 中,只要他们在不同的命名空间中,就可以允许

命名空间可以看做是两个房间,各自在各自的空间中运行就不会有重定义的错误
命名空间的关键字是 namespace

当定义了命名空间但是没有使用的时候会报错
在这里插入图片描述

之后使用命名空间有三种使用方式,第一种
利用 空间名::变量或函数名,的方式指定使用空间的符号

在这里插入图片描述
第二种方式,部分展开需要经常使用的变量
在这里插入图片描述
直接使用 using 指定的变量

可以看到 min 的值是 lrk 的 min
max 的值是 rkl 的 max

第三种 直接展开某个命名空间
在这里插入图片描述
直接
using namespace xxx
来将整个命名空间展开

缺省参数

在某一些情况下,函数传参需要使用默认值来方便使用
比如当初始化栈的大小的时候,如果已经知道大概要用的栈的大小,直接指定大小是很合理的,节省了许多修改空间的时间消耗
除此之外,当不知道空间大小的时候,就需要默认的值
具体使用方式
在这里插入图片描述
其中
缺省参数的设定不能够跳跃
必须从右向左设置
在这里插入图片描述
在这里插入图片描述
上图可以,下图不行

在调用的时候,缺省参数的使用也是先用右边,再用左边
在这里插入图片描述

函数重载

某些时候,我们会用到功能相同的函数,但是使用的参数不一样
在C语言中,我们不允许同名函数的出现,但是在C++中,允许同名函数的出现
但是有前提条件
使用的参数类型相同但是顺序不同
使用的参数类型不同
在这里插入图片描述

编译器能够识别,是因为内部的命名方式不同
在 Linux 中,函数重载,函数会重新命名

比如从上到下,通过编译后得到的汇编文件能够看到Linux的命名分别为

-Z + 函数名长度 + 函数名 + 参数首字母
在这里插入图片描述

为什么不利用返回参数来辨别函数?
因为在调用的时候,无法得到返回参数的信息,只能得到传参的信息

引用

在C 语言 中,多重指针是非常麻烦的
尤其是因为形参改变不改变实参,每次要在外部改变的时候都要利用指针
然后还要解引用等操作
在需要函数影响外部参数的情况下十分不实用

所以C++ 祖师爷觉得这个不行,加了引用来使用
引用就是取别名
比如一个人的名字叫张铁蛋,小名叫张三,都是指代同一个人
但是利用引用就能够很直观地使用对应名字的对应空间

在这里插入图片描述
引用的使用规则

引用在创建时就必须初始化,初始化后这个引用只指向指定空间不能修改
在这个规则下,因为引用在初始化之后就不能修改指向,假如我们实现链表的 Pop 某个值
让节点 next 是一个引用,但是 Pop之后,节点A 的 next 需要改变,用引用实现不了此功能,只能用指针
所以指针和引用是互相补充的

而且,引用的底层逻辑就是指针和指针的解引用,但是这个概念简化了参数的调用

在这里插入图片描述

一个变量可以有多个引用
引用权限放大的问题,如果一个值是 const 那他的引用必须是 const 而不能是一般的类型引用
在这里插入图片描述

引用作为函数参数的使用

如果我在主函数有一个变量 a ,引用就是直接指代 a 所指代的空间,而指针则需要解引用才能指向对应空间
当使用 ra 的时候就是直接使用空间本身

最典型的函数就是 swap
直接传形参是无法实现外部的参数交换的
必须要传引用或者是指针
在这里插入图片描述
运行结果
在这里插入图片描述
这是关于引用传参的使用方法
直接传引用,能够使用函数修改函数外部的参数
在这里插入图片描述
n 是 static 开辟在静态区,栈帧销毁后,n 并没有销毁,可以直接把 n 的空间都直接返回出去

但是如果 n 不是 static 这种写法就有问题
为什么?
因为如果 n 是临时变量,n会随着函数栈帧的销毁而消失,导致n 空间也消失
最终返回的引用是无效的,返回的那块空间是权限在操作系统那里,不再属于用户

传引用的好处
在函数的形参处和返回处,都会进行拷贝
建立栈帧前,会把实参拷贝到形参,返回销毁栈帧前,又会拷贝保存返回值
但是引用则是相当于直接将空间交给函数,省去了拷贝的过程,节省了时间

虽然引用的底层是指针,但是引用和指针有一定的区别
引用没有空引用,指针有空指针
指针可以不初始化,引用必须初始化
引用不能改变对象,但是指针可以
在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32
位平台下占4个字节)
引用比指针使用起来相对更安全
在这里插入图片描述

总结

希望大家看完,能够有所收获
如果有错误,请指出我一定虚心改正
动动小手点赞
鼓励我输出更加优质的内容

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值