1、引用
c++中支持给一个变量取别名,即引用
引用类型与变量类型要相同
这里b就是a的别名
注意:
1、引用在定义的时候必须初始化
2、一个实体可以有多个引用
3、一个引用只能有一个实体,在定义之后不能更改
常引用:
权限由int转换成const int,缩小了,可以;但是不可以有const int 传化成int,即权限只能平移或缩小,但是不能放大。(权限一般针对引用或指针而言)
引用的应用场景:
1、做输出型参数
如swap函数,可以不传指针传引用
2、做返回值
3、在不带哨兵卫头结点的单链表操作中,可以避免二级指针,直接传引用
做返回值类型的时候,如果返回值在函数结束后被销毁,需要用传值返回拷贝值,当数据没有被销毁的时候,才可以用引用返回。
传引用会比传值的开销更小,不需要拷贝
2、函数重载的原理——函数名修饰规则
在Linux上写下一段简单的程序,观察他在gcc与g++下,函数命名的区别
用c和c++分别生成可执行程序
使用objdump查看Linux下的函数名修饰规则
c语言
c++下的函数名修饰
可以看到,在Linux下,c++的函数名由函数名和参数类型的首字母构成,在编译之后两个函数名相同的函数就变成了不同的函数
3、c与c++相互库调用
c++兼容c,如果我们自己写一个c的库,该怎么让c++程序调用呢?
extern “C”关键字
哪c可以同样调用c++的库吗?
答案是不能
当c程序调用c++的库的时候,需要用到extern “C”关键字,对c++的库进行修饰,表明这几个声明的函数按照c的语法来进行编译。但当按照上图的方式可以成功生成库,但当c程序包含头文件并调用的时候,却会出现问题。
问题在于,头文件的包含在预处理阶段,会直接展开头文件,这样extern “C”会暴露在c程序里,extern “C"是c++的语法,c并不支持。那我们还能怎么操作呢?
这个时候我们用到条件编译,当是c++程序的时候,我们暴露extern “C",当是c程序的时候,把其隐藏