C++引用——类型+&+对象

在文章的开始可以先看这样一段C++代码:

int main(void)
{
	int a = 0;
	int& ra = a;
	int n = 0;
	int* pn = &n;
	return 0;
}

这段代码转换为汇编代码是这样的(由于没有在CSDN的代码选项里面找到汇编,我直接复制重要部分的汇编代码吧)

    int a = 0;
00007FF7E6EF224D  mov         dword ptr [a],0  
    int& ra = a;
00007FF7E6EF2254  lea         rax,[a]  
00007FF7E6EF2258  mov         qword ptr [ra],rax  
    int n = 0;
00007FF7E6EF225C  mov         dword ptr [n],0  
    int* pn = &n;
00007FF7E6EF2263  lea         rax,[n]  
00007FF7E6EF2267  mov         qword ptr [pn],rax  

可以看到,定义引用和定义指针的汇编代码并无区别。所以,我们可以把引用看作指针去理解,但是它又与指针有着许多的区别:

1.初始化

指针不初始化,代码可以运行,虽然会被编译器口头警告;但引用不一样,如果引用不进行初始化,代码是直接无法运行,并且引用的初始化赋值只能是一个对象,无法用NULL或者是nullptr对其初始化。

2.赋值

定义一个可读可写的指针,这个指针和变量一样是可以重新被赋值的 。 引用是否也可以被重新赋值呢?

#include<iostream>
using std::cout;
int main(void)
{
	int p = 9;
	int& b = p;
    int a = 10;
	b = a;
	//int& b = a;
	cout << b;
	return 0;
}

可以看到,b = a;这步操作只是把a的值赋给了b,而下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值