c++的重要概念----引用(左值引用)

引用在编译器中的有点点类似是指针常量

void test(int& ref)
{
	ref = 100;
}

int main()
{
	int a = 10;
	
	int& ref = a;
	ref = 20; 

	system("pause");
	return 0;
}

使用引用的注意事项

定义一般变量时:
声明:声明变量类型和名字 -> 定义:根据类型分配内存地址空间 -> 初始化:将初始值拷贝到变量的内存地址空间中(三步)
因此变量的声明,定义和初始化可以分开,不需要一次完成

定义引用类型时: 将引用绑定到初始化对象(一步)
因此定义引用类型时必须有初始值对象(因为引用的对象必须是个左值,如果不提供初始左值的话,默认构造器无法生成左值)

附:左值和右值?
左值:代表一个在内存中占有确定位置的对象(换句话说就是有一个地址)
右值:是不在内存中占有确定位置的表达式(临时对象)

  • 引用一旦初始化就不可以修改?(引用的实质是指针常量,引用不需要分配内存区域)
int i = 1, j = 1;
int &r = i;
&r = j;//在这里&r是一个实际的地址,不是左值,所以不能修改

system("pause");
return 0;

引用做函数参数(简单)

引用函数返回值

  • 注意:不要返回局部变量的引用
    因为局部变量在函数结束后释放,再访问返回地址的话属于非法操作
int& test()
{
	int a = 10;
	return a;
}

int main()
{
	int &i = test();
	cout << i << endl; //10  vs编译器会帮我们保留一次
	cout << i << endl; //乱码
	cout << &i << endl;//一个地址

	system("pause");
	return 0;
}
  • 函数调用可以做为左值
int& test()
{
	static int a = 10;
	return a;
}

int main()
{
	int &i = test();
	cout << i << endl; //10  
	cout << i << endl; //10
	test() = 20;//返回的相当于是变量a,可以对其赋值
	cout << i << endl; //20

	system("pause");
	return 0;
}

常量引用

  • 作用:用来修饰形参,防止误操作;
//合法,原因:
//加上const之后,编译器将代码修改为:
//int temp = 10;
//const int & a =temp;
const int &a = 10;//只读,不可修改
  • 常量引用作返回值
    取消返回值可以作为左值

补充:引用没有 const?
int& const ref是错误的,因为它本身就是个指针常量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值