12 CPP引用

引用的基本概念

引用变量是C++新增的符合类型。

引用是已定义的变量的别名。

引用的主要用途是用作函数的形参和返回值。

声明/创建引用的语法: 数据类型 &引用名=原变量名;

注意:

1 引用的数据类型要与原变量的数据类型相同。

2 引用名和原变量名可以互换,它们值和内存单元是相同的。

3 必须在声明引用的时候初始化,初始化后不可以改变。

4 C和C++使用&符号来指示/取变量的地址,C++给&符号赋予了另一种含义。

引用的本质:

引用是指针常量的伪装。

引用是编译器提供的一个有用且有安全的工具,去除了指针的一些缺点,禁止了部分不安全的操作。

变量是什么?变量就是一个在程序执行过程中可以改变的量。

换一个角度,变量是一块内存区域的名字,它代表了这块内存区域,当我们对变量进行修改的时候,会引起内存区域中内容的改变。

引用用于函数的参数

把函数的形参声明为引用,调用函数的时候,形参将成为实参的别名。

这种方法也叫按引用传递或传引用。(传值、传地址、传引用只是说法不同,其实都是传值。)

引用的本质是指针,传递的是变量的地址,在函数中,修改形参会影响实参。

1 传引用的代码更简洁。

2 传引用不必使用二级指针。

3 引用的属性和特别之处。

引用的形参和const

const的用途:

1 普通变量、指针、函数形参,加上const修饰表示不可以改变。

2 引用的形参的const有特别之处

如果传值的函数,实参可以是常量,也可以是变量。如果传地址和传引用,实参就一定要用变量,这样的话,使用起来就不方便了,所以C++引入const

引用的实参和const

如果引用的数据对象类型不匹配,当引用为const时,C++将创建临时变量,让引用指向临时变量。

什么时候将创建临时变量呢?

1 首先引用是const

2 然后数据对象的类型时正确的,但不是左值。

3 数据对象的类型不正确,但可以转换为正确的类型。

结论:如果函数的实参不是左值或 与const引用形参的类型不匹配,那么C++将会创建正确类型的匿名变量,将实参的值传递给匿名变量,并让形参来引用该变量。

将引用形参声明为const的3个理由:

1 使用const可以避免无意中修改数据的变成错误。

2 使用const,使函数能够处理const和非const实参,否则将只能接受非const实参。

3 使用const,函数能正确生成并使用临时变量。

左值是可以被引用的数据对象,可以通过地址访问它们,例如:变量、数组元素、结构体成员、引用和解引用的指针。

非左值包括字面量(用双引号包含的字符串除外)和包含多项的表达式。

用双引号包含的字符串是字符串常量,字符串常量有地址。

引用用于函数的返回值

传统的函数返回机制与值传递类似。

函数的返回值被拷贝到一个临时位置(寄存器或栈),然后调用者程序再使用这个值。

double m=sqrt(36);

sqrt(36)的返回值6 被拷贝到临时的位置,然后赋值给m.

cout

sqrt(25)的返回值5被拷贝到临时的位置,然后传递给cout.

如果返回的是一个结构体,将把整个结构体拷贝到临时的位置。

如果返回引用不会拷贝内存。

语法:

返回值的数据类型& 函数名(形参列表);

注意:

1 如果返回局部变量的引用,其本质是野指针。

2 可以返回函数的引用形参、类的成员、全局变量、静态变量。(被引用的变量的声明周期一定要比引用长,实际开发中返回全局变量、静态变量,这两种意义不大。)

3 返回引用的函数是被引用的变量的别名,如果不想返回值被修改,将const用于引用的返回类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值