c++引用--举例说明

xiaoxiao2021-02-28  100

简介: 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 c++11中新增了“右值引用”,我们这里所说的引用通常指“左值引用”。

例①

int a = 10; int &rea = a; //rea指向a,是a的另一个名字 int &rerea; //错误 引用必须被初始化

输出a 和 rea 都是10。 需要注意定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用,一旦初始化完成,引用将和它的初始值对象一直绑定在一起,无法将引用绑定到另一个对象,因此引用必须初始化。

例②

int b; int &reb = b; b = 5; double &rereb = b; //错误 引用的类型需要和与之绑定的对象严格匹配,存在两个例外将在下面指出

输出b和reb都是5。 因为引用本身不是一个对象,所以不能定义引用的引用。

例③

void Swap(int &x, int &y) { int t = x; x = y; y = t; }

输出 比如a=5,b=10,当调用函数后,a=10,b=5。 可以看出,引用的操作实际上是作用在引用所引的对象上的。 拷贝大的类类型对象或者容器对象比较低效,甚至有的类类型不支持拷贝操作,函数只能通过引用形参访问类型的对象。

例④

const int c = 10; const int &rec = c; //正确 引用及其对应的对象都是常量 int &rerec = c; //错误,试图让一个非常量引用指向一个常量对象

把引用绑定在const对象上,我们称之为对常量的引用。

例⑤

MyClass a(); //基类 MyClassPlus b();//派生类 MyClass &rea = a; MyClass &reb = b; //基类的引用绑定到派生类上

这是引用的类型与对象类型一致的一个例外,这里的含义是:当使用基类的引用(或指针)时,实际上我们并不清楚改引用(或指针)所绑定对象的真实类型,该对象可能是基类的对象,也可能是派生类的对象。这被称作向上强制转换。但向下强制转换是不允许的,因为is-a关系通常不可逆。

转载请注明原文地址: https://www.6miu.com/read-59829.html

最新回复(0)