分享

引用

 sun317 2012-11-19
引用就是对象的另一个名字。在实际程序中,引用主要用作函数的形式参数。在引用的情况下,每一种引用类型都“关联到”某一其他类型。不能定义引用类型的引用,但可以定义任何其他类型的引用。
引用必须用与该引用同类型的对象初始化:
int ival = 1024;
int &refVal = ival; // ok: refVal refers to ival
int &refVal2; // error: a reference must be initialized
int &refVal3 = 10; // error: initializer must be an object
 
const 引用:
const 引用是指向 const 对象的引用:
const int ival = 1024;
const int &refVal = ival; // ok: both reference and object areconst
int &ref2 = ival; // error: non const reference to aconst object
可以读取但不能修改 refVal ,因此,任何对 refVal 的赋值都是不合法的。这个限制有其意义:不能直接对 ival 赋值,因此不能通过使用 refVal 来修改ival。
同理,用 ival 初始化 ref2 也是不合法的:ref2 是普通的非 const 引用,因此可以用来修改 ref2 指向的对象的值。通过 ref2 对 ival 赋值会导致修改const 对象的值。为阻止这样的修改,需要规定将普通的引用绑定到 const 对象是不合法的。
 
const 引用可以初始化为不同类型的对象或者初始化为右值,如字面值常量:
int i = 42;
// legal for const references only
const int &r = 42;
const int &r2 = r + i;
同样的初始化对于非 const 引用却是不合法的,而且会导致编译时错误。观察将引用绑定到不同的类型时所发生的事情,容易理解上述行为,假如我们编写
double dval = 3.14;
const int &ri = dval;
编译器会把这些代码转换成以下形式的编码:
int temp = dval; // create temporary int from the double
const int &ri = temp; // bind ri to that temporary
如果 ri 不是 const,那么可以给 ri 赋一新值。这样做不会修改 dval,而是修改了 temp。期望对 ri 的赋值会修改 dval 的程序员会发现 dval 并没有被修改。仅允许 const 引用绑定到需要临时使用的值完全避免了这个问题,因为 const 引用是只读的。
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多