初识C++(2)

 一· 引用

概念:引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。

注意:

1·引用必须初始化

2·一个变量可以有多个别名

3·一个引用一旦引用了一个实体就不能引用其他实体

例如

注释掉的两段一个用了引用,一个用了2级指针,两段代码含义相同

但注意不能用HP && hp代替HP ** hp

引用的实践主要用于引用传参或引用做返回值,减少拷贝,提高效率

函数在返回时会创建一个临时对象(它具有常性,不能够更改),创建int类型的函数接收的就是这个临时变量,而int&接收到的是他的引用,相当于跳过了临时对象那一步,返回的是它的引用,不具有常性,可以改变(这里是对栈的操做(一种数据结构),对象在堆上,不销毁可以使用)

这里a是一个局部变量,当返回时,a变量销毁,引用错误(有点像野指针)

二·const引用

可以引用const对象,但必须使用const引用

例如(下面是一个错误示范)

变量a是常属性的,不可更改的,而b作为a的别名,是int类型的,可以更改的,将权限进行了放大

应该改为const int& b;(注意权限不能放大,但可以缩小)

2·权限缩小

b的权限缩小了,但不影响a的权限,即a可改,但b不可以改(a++可以,b++不行)

const引用还可以给常量取别名

例如

const int& a = 30;

注意:当引用表达式时,表达式也是先存储在临时对象里的,即具有常性,所以给表达式取别名时应该用const引用

例如

int a = 8;

int b = 10;

const int& c = (a+b);

在这里我们要做一个区分

(1)

第一个是权限的放大(a只可读不可写,而取别名后ra可读可写,它们指向同一块空间,是经典的权限放大)

而第二个是值拷贝(将a的值赋给rd,将10拷贝给空间ra)

(2)

double b= 13.14;

int a = b;

int& c = b;(错误)

const int& c = b;(正确)

当类型的转换时,也会产生临时对象,引用时也是引用了他的临时对象,要用const引用

(过程,先将b的整数部分保存在临时对象里,再给临时对象起别名,而临时对象的生命周期就和引用相同了,即引用销毁时,临时对象才进行销毁)

const引用的主要用途:用于传参,比较宽泛(可传值,传临时对象,)

二·关键字inline

inline是为了解决函数不建立栈帧,提高效率,但是只适用于简单的函数而频繁调用的函数,复杂函数就算加了inline也不会展开(当代码的运行占很大一部分时间,而栈帧的建立所占时间就可以忽略不计,加上inline也不会减少运行时间)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值