引用学习(1)----初识引用

前言

引用和指针的区别,是我在找工作过程中遇到最多的问题之一。其实也不难理解,引用其实也是一种指针,称之为隐式指针。继指针之后,我下面会对引用进行介绍,彻底干掉这个问题。

认识引用

引用的定义

引用是一种隐式指针,为对象取一个新名字,通过&操作符号来实现。如:

int a = 10;
int& b = a;

 这里面,b就是a的引用。对b执行的操作和对a执行操作得到的效果一模一样。

引用的使用说明

引用是一个变量的别名,对引用的操作和对其引用对象的操作具有相同的作用效果。

一个引用只能对应一个变量。

使用引用必须要初始化,不然会报错。

引用的本质其实是一个指针常量,int& b 和 int* const b是一个作用,为什么这么说呢?首先看指针常量的特点,前面已经说过指针常量指向的地址不可以修改,但是所指向地址的内容可以修改。引用也有这样的特点,引用b作为对应对象a的别名,我们修改引用b的值的时候,a的值也会改变,但是地址不变。看例子:

#include<iostream>
using namespace std;

void main()
{
	int a = 10;
	cout << "a赋值之前得到的a= " << a << endl;
	cout << "a赋值之前得到的a的地址= " << &a << endl;
	int& b = a;
	b = 100;
	cout << "a赋值给引用b之后得到的a=" << a << endl;
	cout << "a赋值给引用b之后得到的a的地址= " << &a << endl;

	cout << "a赋值给引用b之后得到的b=" << b << endl;
	cout << "a赋值给引用b之后得到的b的地址= " << &b << endl;
}

运行结果是这样的:

从结果我们可以看出来,a和b的地址没有变化,但是其指向的值发生了改变。

但是引用和指针还是有区别的,指针是一种数据类型,而引用不是;还有就是用法上,指针变量的用法复杂,而引用变量在被定义之后,它的使用方法和普通的变量是一样的。

右值引用

上文中提到的引用被默认为左值引用,那么什么是右值引用呢?

右值引用是C++11中新增加的非常量引用类型,形式如下:

数据类型 && 引用名称 = 被引用的对象;

来看一个例子,

void main()
{
	int a = 10;
	int&& b = a;   //报错
	cout << "b的值:" << b << endl;
}

为什么会不行呢,我明明按照那个形式写的呀?其实仔细想想,如果int && b=a不报错,那么一个&和两个&岂不是就没有区别了嘛。所以左值引用和右值引用绝对不同,不同就在于右值引用是对临时变量的引用,比如函数的返回值,并且所引用的临时变量不可以被改变。在右值引用初始化之后,临时变量消失。举个例子:
 

#include <iostream>
using namespace std;

int test()
{
	int a = 10;
	return a;
}

void main()
{
	int a = 10;
	int&& b = test();
	//int& b = test();//报错
	//int&& b = ++(test());//报错
	cout << "b的值:" << b << endl;
}

第一个报错语句说明左右值引用的不同,第二个报错语句表示右值的临时变量不可改变。运行结果是:b的值:10

引用的初步认识先写到这里,下一篇会对引用在传参方面的使用及优势进行介绍。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值