关于引用

看过很多博客说引用是不开辟内存的,但经过实践,这一说法太过于表面。我通过代码转到反汇编,发现有开辟形参压栈的过程:

#include <iostream>

int sum(int& a,int& b)
{
	return a+b;
}

int main()
{
	int a = 10;
	int b = 20;

	int s = sum(a,b);

	std::cout<<sum<<std::endl;

	return 0;
}

不过这些细节没有深究,作为一个疑问保留了下来,等待以后研究。

 

下来正式谈谈引用,引用分表层和深层两个意思:

1.表层:变量或函数返回值的别名

2.深层:指针

例如:

    int a = 10;
	int b = 20;

	int& c = a;

可以直接使用c来表示a,c=20也就是a=20。

他在这个过程中自动做了一次类似于指针的解引用,因此,我们无法对c取地址,也无法对c重新赋值:

 

下面通过简单的例子来深入理解引用:

int main()
{ 
	int a = 10;
	int &b = a;  //正确:b引用a

	//int &c = 20;    //错误,引用了一个常量,当对c进行操作时,即对20进行操作,这是不允许的
	const int &c = 20;    //正确:const修饰c,不能许c做修改操作

	const int a = 10;
	const int& b = a;   //正确

	int a = 10;
	const int &b = a;  //正确 

	int a = 10;
	int *p = &a;
	int* &q = p;    //正确,相当于对p进行操作
	
	int a = 10;
	int *p = &a;
	const int* &q = p; //错误,q类型为const int *,而p为int *,应该给int *p前面加const
	
	int a = 10;
	int * p = &a;
	int* const &q = p;   // 正确

	return 0;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值