一文搞懂引用、指针、const、参数传递的关系

一文搞懂引用、指针、const、参数传递的关系


前言

在《剑指offer》上看到一个问题:如果写的函数需要传入一个指针,则面试官可能会问是否需要为该指针加上const、把const加在指针不同的位置是否有区别;如果写的函数需要传入的参数是一个复杂类型的实例,则面试官可能会问传入值参数和传入引用参数有什么区别、什么时候需要为传入的引用参数加上const。
摸摸鼻子,自问自己是一脸懵逼,答不上来的。关于引用、指针、const以及参数传递这方面的知识是混淆不堪的!


一、const限定符

1、 const对象一旦创建后其值就不能再改变,const对象必须初始化。

2、 对象的类型决定了其上的操作,与非const类型所能参与的操作相比,const类型的对象能完成其中大部分,但也不是所有操作都适合。主要限制就是只能在const类型的对象上执行不改变其内容的操作。

3、 在不改变const对象的操作中还有一种是初始化,利用一个对象去初始化另外一个对象,它们是不是const都无关紧要。


二、引用是什么?

1、引用即别名: 引用并非对象,相反的,它只是为一个已经存在的对象所起的另外一个名字。

2、 定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。初始化完成后,引用将和它初始值对象一直绑定在一起。

3、 引用必须初始化,因为无法令引用重新绑定到另外一个对象。

4、 引用类型都要和与之绑定的对象严格匹配(有两种例外)。且引用只能绑定在对象上,不能与字面值或者某个表达式计算结果绑定在一起。

5、const的引用:

5.1、常量引用: “常量引用” 是 “对const的引用” 的简称。
5.2、 可以把引用绑定到const对象上,与普通引用不同的是:对常量的引用不能用作修改它所绑定的对象。

    const int ci = 123;
	const int &r1 = ci;   // 正确:引用及其对应的对象都是常量
	r1 = 42;              // 错误:r1是对常量的引用
	int &r2 = ci;         // 错误:试图让一个非常量引用指向一个常量对象

5.3、第一种例外: 初始化常量引用时允许用任意表达式作为初始值,只要该表达式的结果能转换成引用的类型即可。尤其允许为一个常量引用绑定非常量的对象、字面值、甚至是一般表达式。

	int i = 123;
	const int &r1 = i;       // 允许将const int&绑定到一个普通int对象上
	<
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值