const的引用

对常量的引用:把引用绑定到const对象上,就像绑定到其他对象上一样,不能被用作修改它所绑定的对象:

const int ci = ;
const int &r1 = ci;//正确:引用及其对应的对象都是常量
r1 = ;//错误:r1是对常量的引用
int &r2 = ci;//错误:试图让一个非常量引用绑定一个常量

因为不允许直接为ci赋值,所以也就不能通过引用去改变ci。

初始化和对const的引用

在初始化常量引用时允许任意表达式作为初始值,只要该表达式的结果能转换成引用的类型,允许为一个常量引用绑定非常量的对象、字面值,甚至是个一般表达式:

int i = ;
const int &r1 = i;//允许const int&绑定到一个普通int对象上
const int &r2 = ;//正确:r1是一个常量引用
const int &r3 = r1 * ;//正确:r3是一个常量引用
int &r4 = r1 * ;//错误:r4是一个非常量引用

当一个常量引用被绑定到另外一种类型上:

double dval = 3.14;
const int &ri = dval;

ri引用了一个int型的数,对ri的操作应该是整数运算,但dval却是一个双精度浮点数而非整数,为了确保让ri绑定一个整数,编译器把上述代码变成如下形式:

const int temp = dval;//由双精度浮点数生成一个临时的整型常量
const int &ri = temp;//让ri绑定这个临时常量

临时量对象:当编译器需要一个空间来暂存表达式的求值结果时临时创建的一个未命名的对象。

对const的引用可能引用一个并非const的对象

常量引用仅对引用可参与的操作做出了限定,对于引用的对象本身是不是一个常量未作限定:

int i = ;
int &r1 = i;//引用ri绑定对象i
const int &r2 = i;//r2也绑定对象i,但是不允许通过r2修改i的值
r1 = ;//r1并非常量,i的值修改为0
r2 = ;//错误:r2时一个常量引用

const的引用的更多相关文章

  1. C++ Prime:const的引用

    可以把引用绑定到const对象上,就像绑定到其他对象上一样,我们称之为对常量的引用.与普通引用不同的是,对常量的引用不能被用作修改它所绑定的对象: ; const int &r1 = ci; ...

  2. const 相关知识 const和指针、const和引用

    以前老是对const概念不清不楚,今天算是好好做个笔记总结一下.以下内容包括1)常量指针(指针本身是常量),2)指针常量(指针指向的是常量对象),3)常量引用,4)const成员函数. 常量指针,指针 ...

  3. [转]为什么复制构造函数的参数需要加const和引用

    [转]为什么复制构造函数的参数需要加const和引用 一.引言 1.0在解答这个问题之前,我们先跑个小程序,看下调用关系. #include <iostream> using namesp ...

  4. 【C++编程基础】(1)—— 函数原型声明、函数模板、引用、const 常引用、const 常量指针

    一.函数原型声明: 1.函数声明告诉编译器函数的名称,和如何调用函数(返回类型和参数):函数定义提供了函数的实际主体. 2.强制性的:在C++中,如果函数调用的位置在函数定义之前,则要求在函数调用之前 ...

  5. C++ 中的 const、引用和指针的深入分析

    1,关于 const 的疑问: 1,const 什么时候为只读变量,什么时候是常量: 1,const 从 C 到 C++ 进化的过程中得到了升级,const 在 C++ 中不仅仅像在 C 中声明一个只 ...

  6. const、引用与指针

    前提 我们忽略掉了相同类型是否可以赋值的情况(我到现在的学习里都还可以相互赋值),以及类型兼容的情况.只考虑const.&.*等修饰符带来的影响 类型兼容: 强制类型转换 基类与子类间的兼容 ...

  7. C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字)

    命名空间 概述 在C/C++中,变量.函数和后面要学到的类都是大量存在的,这些变量.函数和类的名称将都存在于全局作用域中,可能会导致很多冲突.使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲 ...

  8. 临时变量不能作为非const类型引用形参的实参

    摘要:     非const 引用形参只能与完全同类型的非const对象关联.      具体含义为:(1)不能用const类型的对象传递给非const引用形参:                  ( ...

  9. const 常引用

    常类型是指使用类型修饰符 const 说明的类型,常类型的变量或对象的值是不能被更新的. 这篇主要说常引用.常引用是指所引用的对象不能被更新. 在实际应用中,常引用往往用来作为函数的形参,这样的参数称 ...

随机推荐

  1. Day23--Python--常用模块02--序列化,configparser

    1. 序列化 把对象打散成bytes或者字符串. 方便存储和传输 序列化 把bytes或者字符串转换回对象. 反序列化 2. pickle(比较重要) 把python中所有的对象都可以转化成bytes ...

  2. 苹果电脑利用curl下载数据集

    在看tensorflow书上迁徙学习的这一部分的时候,书上说利用 curl http://download.tensorflow.org/example_images/flower_photos.tg ...

  3. 插入排序Java版

    package dataStructureAlgorithmReview.day01; import java.util.Arrays; /** * 插入排序 * @author shundong * ...

  4. MySQL数据库基础学习

    MySQL基础知识 ----------- MySQL数据库简介 内存:一断电数据就没有了---------数据库:可以实现数据的持久化存储,有完整的管理系统管理,方便查询--------- DB:数 ...

  5. Dream team: Stacking for combining classifiers梦之队:组合分类器

     sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  6. ansible基础-playbook剧本的使用

    ansible基础-playbook剧本的使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.YAML概述 1>.YAML的诞生 YAML是一个可读性高,用来表达数据序 ...

  7. Pycharm搭建Django开发环境

    Pycharm搭建Django开发环境 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们大家都知道Django是python都一个web框架,因此大家需要自行安装python环境 ...

  8. Hadoop记录-Hadoop集群重要监控指标

    通用监控指标 对于每个RPC服务应该监控 RpcProcessingTimeAvgTime(PRC处理的平均时间) 通常hdfs在异常任务突发大量访问时,这个参数会突然变得很大,导致其他用户访问hdf ...

  9. CentOS7用Mono和MonoDevelop写C#程序

    MonoDevelop 是个Linux平台上的开放源代码集成开发环境,主要用来开发Mono与.NET Framework软件. MonoDevelop 整合了很多Eclipse与Microsoft V ...

  10. zepto.js

    // Zepto.js// (c) 2010-2016 Thomas Fuchs// Zepto.js may be freely distributed under the MIT license. ...