const的引用

1.const引用可以绑定const对象,但是非const引用无法绑定const对象,const引用,且必须初始化。

                 const int ci = 1024;         //正确
                 const int &r1 = ci;          //正确,引用和对象都是const
                 r1 = 42;                     //错误,const的引用无法被修改
                 int &r2 = ci;                //错误,非const引用不能指向const对象
                 int &r2 = r1;                //错误,非const引用不能指向const引用

2.虽然要求引用的类型必须与其引用对象的类型一致,但是有两个例外。第一种就是初始化常量引用时允许用任意表达式作为初始值,只要该表达式的结果能转换成引用的类型即可。第二种在类的多态中讲解。
尤其,允许为一个常量引用绑定非常量的对象,字面值,甚至是个一般表达式,其实就是左值的限定符要包含右值的限定符:

                 int i = 42;             
                 const int &r1 = i;      //正确,允许将const int引用绑定到一个普通的int对象上
                 i = 43;                 //正确,i不是常量,可以修改。
                 cout << r1 << endl;     //正确,且输出43。
                 r1 = 1;                 //错误,r1是常量引用,不能修改它

                 const int &r2 = 42;      //正确,r2是常量引用
                 const int &r3 = r1 * 2;  //正确,r3是一个常量引用
                 int &r4 = r1 * 2;        //错误,r4是一个普通的引用,右值不能为表达式,只能为与左值相等的类型的对象或者引用


                 double dval = 3.14;
                 const int &ri = dval;            //正确,编译器将dval值转换了一下,具体转换过程如下。
                 const int &ri1 = 3.14;           //正确,编译器将dval值转换了一下,具体转换过程如下。
                 dval = 123;
                 cout << ri << " "<<dval << endl;  
                 //输出3 123。因为ri指向的是编译器给予的临时量变量,而不是dval。           

                 /*
                对于这种情况,编译器进行了如下变换:
                const int temp = dval;                      
                //编译创建一个临时量对象来存储dval转换成整型后的数
                const int &ri = temp;                       //将引用指向临时量对象
                */

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值