c++基础2

文章讲述了C++中的引用特性,包括引用作为变量的别名,初始化规则,以及在函数参数和返回值中的应用。同时,讨论了函数重载的原理,通过示例展示了Linux下C与C++的函数名修饰规则差异。最后,探讨了C与C++之间的库调用问题,强调了externC在C++兼容C库时的作用,以及如何处理C程序调用C++库时遇到的问题,提出了条件编译的解决方案。
摘要由CSDN通过智能技术生成

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程序的时候,把其隐藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值