引用与const的区别与用法

一、引用
1、 引用就是为对象起另外一个名字。一般在初始化变量的时候,初始值会被拷贝在新建的对象当中。然而定义引用时,程序把引用和它的初始值绑定到一起,而不是将初始值拷贝给引用。 一旦初始化完成,引用将和它的初始值对象绑定在一起。因为无 法令引用重新绑定到另外一个对象,因此引用必须初始化
    int ival=1024;
    int &relVal=ival;  //relVal指向ival这个对象(relVal是ival的别名)
    int &relVal2;   //错误,引用必须被初始化

2、定义一个引用之后,对其进行的所有操作都是在与之绑定的对象上进行:
为引用赋值,实际上是把值赋给了与引用绑定的对象:
    relVal=2;    //把2赋给relVal指向的对象,此处即是赋给ival

获取引用的值,实际上就是获取了与引用绑定的对象的值。同理,与引用作为初值,实际上是以与引用绑定的对象作为初始值:
    int ii=relVal;   //与ii=ival执行结果一样
    int &relVal3=relVal;  //relVal3绑定到了那个与relVal绑定的对象上,这里就是绑定到ival上

3、除了两种例外情况之外,其它所有的引用类型都要和与之绑定的对象严格匹配(如类型相同等)。而且, 引用只能绑定在对象上,而不能与 字面值或某个 表达式的计算结果绑定在一起。
    int &relVal4=10;  //错误,引用类型的初始值必须是一个对象

    double dval=10.0;
    int &relVal5=dval;  //错误,此处引用类型的初始值必须是int对象


二、const限定符:
    1、const对象一旦创建之后,值就不能再改变,随意 const对象必须初始化。初始值可以是任意复杂的表达式:
            const int i =get_size();    //运行时初始化
            const int j=42;     //编译时初始化
            const int k;    //错误,k是一个未经初始化的常量

    2、初始化和const:
        如果利用一个对象去初始化另外一个对象,则它们是不是const都无关紧要
        int i=42;
        const int ci=i;    //正确,i的值被 拷贝给了ci
        int j=ci;     //正确,ci的值被 拷贝给了j

三、const的引用:
    1、可以把 引用绑定到const对象上,称为 对常量的引用。与普通引用不同,对常量的引用 不能被用作修改它所绑定的对象
        const int ci=1024;
        const int &r1=ci;     //正确, 引用及其对象都是常量,r1是对常量的引用,r1指向ci这个常量
        r1=42;                    //错误,r1是对常量的引用
        int &r2=ci;           //错误,试图让一个非常量引用指向一个常量对象
            
    2、引用的类型必须与其所引用的对象类型一致,但是有两种情况除外:
        (1)、在初始化 常量引用时(const int &r )时,允许用任意表达式作为初值,只要改表达式的结果能够转换成引用的类型即可
        (2)、允许一个 常量引用绑定 非常量对象、字面值、甚至是个一般表达式:
        int i=42;
        const int &r1=42;    //允许一个 常量引用绑定字面值
        const int &r2=i ;    //允许一个 常量引用绑定到一个非常量对象
        const int &r3=r1*2;    //允许一个 常量引用绑定一般表达式
        int &r4=r1*2;   //错误,r4是一个普通的非常量引用
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值