c++引用--举例说明

简介:
引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
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关系通常不可逆。

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页