C++之引用

声明一个引用时,必须同时对他进行初始化,试图指向一个已存在的对象
一旦一个引用被初始化后,就不能改为指向其他对象
引用不是对象,一个引用只是对象的别名。所以没有引用的引用(引用的是对象才行)


引用多数情况出现在函数传参。参数传递有按值调用引址调用。按值调用就是实参复制到形参,形参的任何操作影响实参;而引址调用则是传递实参的引用或指针,对传递参数的操作也是对实参的操作,如果不想对实参有更改则在传递的参数前声明const。

对于参数是对象的,采用按值引用需要很多时间在形参的复制上。这并不是我们期望的,而使用引用或指针就能解决,若想保护对象,加上const就好。


关于指向派生类的基类指针和基类引用的访问范围:
(1)指向派生类的基类指针或者引用,其类型仍然属于基类类型,而不是派生类类型,尽管它指向的是派生类。其访问范围受其基类类型影响,因此只能访问基类中可以访问的类型。
(2)对于虚函数,使用指向派生类的基类指针或基类引用访问时,将会体现出多态性,调用的是实际上是派生类的对应函数。
(3)对于指向派生类的基类引用,虽然说引用通常是被引用对象的一个别名,但这里,基类引用的访问范围与被引用对象的访问范围明显是不一样的!

一句话这样总结:当基类类型的指针或引用使用派生类的对象时,它对虚函数的调用,实际上是调用了被指向对象类的函数。注意,取决于被指向对象。
    当它对非虚函数调用时,会使用基类自身的函数。


const reference is reference to const. 

A reference is not an object, so we cannot make a reference itself const.
引用本身就不能重新绑定到其他对象,在某种程度上来说所有的引用都是"const"的
引用有没有const修饰仅仅限定了能对引用做的事,而不是我们可以修改引用的绑定对象


理解常引用和引用的列子:
int i = 42;   
const int &r1 = i; //常引用可以绑定Nonconst变量  
const int &r2 = 42; //可以,42是常量,r2是常引用   
const int &r3 = r1 * 2; //可以,常引用就是这么吊   
int &r4 = r * 2; //错误,非const引用没有这么强大


int i = 42;
int &r1 = i; //r1是i的引用
const int &r2 = i; // r2是i的常引用,不能通过r2更改i
r1 = 0; //ok
r2 = 0; //error

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值