👑个人主页:啊Q闻
🎇收录专栏:《C++》
🎉我自会去见我的山
💡感谢阅读,欢迎关注,点赞,收藏,评论💡
前言
这篇博客是对C++的一个初步认识,这个认识是基于C语言的基础上初识C++,C++部分是对C语言设计不合理的地方进行了优化,今天我们就要学习一下。这篇博客是下半篇,上半篇的链接在【C++】初识C++(上)-CSDN博客,感兴趣的铁子可以去看看哦。
一.引用
1.初识引用
(1)引用概念
引用不是新定义一个变量,而是给已存在的变量取一个别名,它和它引用的变量共用一块内存空间。
&+引用名==引用实体
需要注意的是:引用类型和引用实体是同种类型。
引用其实类似于C语言中的指针,我们在C语言中学过一个交换函数的实现,当时我们传参用到了指针,在C++中,利用引用也可以实现。所以说引用和指针是类似的。
(2)引用特性
1.引用在定义时必须初始化
2.一个变量可以有多个引用
3.引用一旦引用一个实体,在不能引用其他实体
1.引用在定义时必须初始化
2.一个变量可以有多个引用
3.引用一旦引用一个实体,在不能引用其他实体
2.引用辨析
(1)常引用
((1))常引用权限问题
1.如图代码:1-->2属于是权限的放大,这种引用是错误的。
2. 如图代码:1-->2属于权限的缩小,这种引用时正确的。因为2所具有的能力是1本就有的。
3.如图代码:1-->2属于权限的平移,这种引用是正确的。
扩展至指针:指针和引用在权限方面的使用差不多。
1.如图代码:1-->2属于权限的放大,这种使用是错误的。
2.如图代码:1-->2属于权限的缩小。
3.如图代码:1-->2属于权限的平移
还有一些计算是会用到临时变量,其也隐藏着引用权限的问题。
1.类型转换
2.表达式计算
((2))常引用增减
对于引用变量名的修改会直接影响到引用实体。
但是对常引用的增减是错误的,因为常引用是不可以修改的,其用了const修饰。
(2)指针和引用的比较
1.指针是通过传值,而传值是用值作为参数或者返回类型,效率是很低的,所以,两者相比较,传引用具有优势。
2.在语法概念上,引用就是一个别名,没有独立的空间,和其的引用实体共用一块空间。
在底层实现上,引用是有空间的,因为引用是按指针方式实现的。
3.引用在定义时必须初始化,但是指针不需要。
4.引用在初始化时引用一个实体后,就不能在引用其他实体了,指针可以在任何时刻指向任何一个同类型的实体。
5.没有NULL引用,但是有NULL指针。
6.在利用sizeof计算大小时:引用结果为引用类型的大小,指针的大小则只与平台有关。
7.自加即引用的实体加1,而指针自加是向后偏移一个类型的大小。
8.有多级指针,没有多级引用。
二.内联函数
内联函数就是以inline修饰的函数,编译时C++会在内联函数处展开,但是不会调用函数栈帧,从而提高了内联函数的效率。
1.inline是一种以空间换时间的做法,在编译阶段,会将函数体替换成函数调用,所以其会使目标文件变大。
2.inline对于编译器来说,它只是向编译器提出了一种请求,接不接受的权利取决于编译器,如果函数规模较大,或者频繁调用,或者是递归,编译器就会忽略inline的请求。
3.inline不建议声明和定义分离,两者分离容易导致连接错误,因为inline会被展开,内联函数没有地址,链接就会找不到。所以我们可以直接在.h文件中声明某个函数时,直接将其定义。
三.auto关键字
1.初识auto
1.auto的作用是其可以替代写比较长的类型,有些类似于typedef的作用。但是我觉得auto更为方便,其会自动对应成相应的类型。
2.auto定义变量时要初始化,否则编译不允许通过。
2.auto的使用细则
1.用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&
2.在同一行定义多个变量时,这些变量必须是相同的类型,因为编译器只会对第一个类型进行推导,然后用推导出的类型定义其他变量。
3.(1)auto不能作为函数的参数
3.(2)auto不能直接用来声明数组