C++的const限定符

const限定符总是让人很头疼,下面讲解一下几个比较容易混淆的概念:

  1. 对常量的引用(常量引用):
    一般情况下,引用的类型要与其所引用的对象的类型一致,其中的例外情况就是,当初始化常量引用时,允许用任意表达式作为初始值,只要改表达式能转换成引用的类型即可。
const int i = 1;
const int &ri = i;
int i = 42;
const int &r1 = i;
const int &r2 = 42;
  1. 指向常量的指针
    和引用类似,一般情况下,指针的类型应该与其指向的对象的类型一致,但是允许一个指向常量的指针指向一个非常量对象。
const int i = 4;
const int *cptr = &i;
int a = 1;
cptr = &a;
  1. 常量指针
    由于指针本身就是一个对象,因此可以定义一个指针为常量指针,必须被初始化。当常量指针指向一个对象时,那么这个指针永远只能指向这个对象,但是被指向的对象的值能否改变,取决于被指向的对象本身是否是一个常量。
int i = 1;
int *const cp = &i;//cp永远指向i,
i = 2;//由于i是非常量,其值可以改变
const int c = 2;
const int *const p = &c;//p是一个指向常量的常量指针
c = 1;//错误,c为常量,其值不能被改变
p = &i;//错误,p是一个常量的指针,其指向不能改变
  1. 顶层const与底层const
    顶层const表示指针本身就是一个常量,而底层const表示指针所指的对象是一个常量。
int i = 0;
int *const pi = &i;//pi的值不能被改变,pi为顶层const
const int ci = 42;//ci是一个int类型的常量,值不能被改变,为顶层const
const int *p2 = &ci;//p2是一个指向常量的指针,p2的值可以改变,所以p2为底层const
const int *const p3 = p2;//靠右的const是顶层const,靠左的const是底层const
const int &r = ci;//用于声明引用的const都是底层const

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习:第五章-Linux用户和用户组管理

一用户管理命令用户信息文件:/etc/passwd aa:x:501:501::/home/aa:/bin/bash 第一列:用户名 第二列:密码标志 第三列:UID用户ID 0管理员 1-499系统用户(伪用户) 500普通用户 第四列:GID初始组ID…

一点等于多少厘米_马桶知识介绍,你了解马桶多少

我们可能并不了解我们经常运用的马桶,认为马桶便是简简单单的规划,没什么技术含量。其实不然,马桶的规划也包含了不少物理学原理。假如你家里的马桶出现毛病,首先要排查毛病的原因,但是假如不了解马桶结构图那就很难把…

动态内存分配与智能指针

内存分配: 静态存储区: 局部static对象类的static数据成员定义在任何函数之外的变量 栈区: 函数内的非static对象 动态内存分配的方式有: new和delete智能指针(shared_ptr、unique_ptr、weak_ptr)all…

1151压力变送器型号_日本进口横河EJA530E压力变送器型号解读!

横河EJA变送器对大家来说也许不陌生,但是对于EJA变送器的型号很多人还不是很懂,因为一个全型号代表这很多参数,每一个字母和每一个数字背后都是一个准确的参数,我们在选型的时候要提供必要的参数,更具参数选出合适的型…

plc控制可调节阀流程图_PLC控制的水箱液位控制系统毕业论文

内容介绍原文档由会员 莎士比亚 发布论文标准WORD格式排版40页摘要在人们生活以及工业生产等诸多领域经常涉及到液位和流量的控制问题, 例如居民生活用水的供应, 饮料、食品加工, 溶液过滤, 化工生产等多种行业的生产加工过程, 通常需要使用蓄液池, 蓄液池中的液位需要维持合适…

idea继承后重新方法快捷键_idea 查看类继承关系的快捷键

类似eclipse ctrlt的快捷键,idea中是ctrlH…找到对应的类 查看类关系图…1.在想要查看的类上按 Ctrl H -> Diagrams -> Show Diagrams -> Java Class Diagrams -> Show Implementations -> Ctrl A -> 右击一下 -> Enter .…打开想要查看的接口或者类文件…

怎样在数组末尾添加数据_如何利用C++实现可变长的数组?

应该执行什么功能?假设我们要实现一个将自动扩展的数组类,是否需要实现函数?让我们从下面主要功能使用的功能开始,看看我们需要实现哪些功能。输出结果:0 1 2 3 40 1 2 100 4您需要做什么才能实现上述功能?…

Linux学习:第六章-Linux服务和进程管理

一进程查看 1psaux查看当前系统所有运行的进程 -a显示前台所有进程 -u显示用户名 -x显示后台进程 user: 用户名 pid:进程id。PID1init系统启动的第一个进程 %CPUcpu占用百分比 %MEM内存占用百分比 VSZ虚拟内存占用量KB RSS固定内存占有量 tty登录终端tty…

覆盖索引与联合索引_浅析MySQL的索引覆盖和索引下推

写在前面在MySQL数据库中,索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点,索引就是为了提高数据查询的效率。今天我们来聊聊在MySQL索引优化中两种常见的方式,索引覆盖和索引下推索引覆盖要了解索引覆…

python3 输入输出_Python3基础之输入和输出实例分析

通常来说,一个Python程序可以从键盘读取输入,也可以从文件读取输入;而程序的结果可以输出到屏幕上,也可以保存到文件中便于以后使用。本文就来介绍Python中最基本的I/O函数。一、控制台I/O1.读取键盘输入内置函数input([prompt])&…

redis 哨兵 异步_突破Java面试(23-8) - Redis哨兵主备切换的数据丢失问题-阿里云开发者社区...

1 数据丢失的两个场景主备切换的过程,可能会导致数据丢失1.1 异步复制由于 master > slave的复制是异步的,所以可能有部分数据还没复制到slave,master就宕机,于是这些数据就丢失了1.2 脑裂导致脑裂,也就是说&#x…

vue 断开正在发送的请求_vue 发送请求频繁时取消上一次请求

前言:在项目中经常有一些场景会连续发送多个请求,而异步会导致最后得到展示的结果可能不是最后一次发送请求返回的结果,且对性能也有非常大的影响。场景:列表式切换商品,有时候上一次请求的结果非常慢,而我…

Linux学习:第六章-Linux网络配置

上一章的补充: 常见网络端口: 2021ftp服务文件共享 22ssh服务安全远程网络管理 23telnet服务 25smtp:简单邮件传输协议发信 110pop3:邮局协议收信 80www网页服务 3306mysql端口 3389windows终端服务 53DNS端口 /etc/services所有系…

sequelize 增加数据库字段_Node项目使用Sequelize操作数据库(一)(包括模型,增,删、改等)...

Sequelize 是一个基于 Promise 的 Node.js ORM,目前支持 Postgres、MySQL、SQLite 和 Microsoft SQL Server。它具有强大的事务支持,关联关系、读取和复制等功能。所谓ORM是指对象关系映射,通过使用描述对象和数据库之间映射的元数据&#xf…

django orm插入一条_如何通过django的ORM远程发布文章?

利用django的ORM可以方便的给数据库插入文章但是假如我django放在阿里云,那我想在本地写个插件,每天很方便的插入一些数据,最好是通过ORM的,因为管理起来比较方便,会涉及到多个站,可能会有200多个站&#x…

循环斐波那契数列_第五课:斐波那契数列(第一课时)

简介:又称黄金分割数列、因数学家列昂纳多斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34……在数学上,斐波那契数列以如下被以递推的方法定义:F(…

命令行 蓝牙_Ubuntu使用BlueZ驱动蓝牙dongle

蓝牙dongle即蓝牙适配器,一般为USB接口,通过USB连接到PC等设备。连接dongle后,PC即可使用驱动程序控制dongle连接其它蓝牙设备。本文主要介绍在Ubuntu系统中安装BlueZ的方法及蓝牙的使用。01获取BlueZBlueZ是Linux系统的官方蓝牙协议栈&#…

Java在Windows下导出xml文件到Linux服务器上

最近由于公司项目需要,学习了在Windows平台导出xml文件到Linux服务器上的指定目录下的方法,(注:这里的我的Linux是在本机上装的虚拟机)现在写下来记录一下! 1.首先是项目截图: 2.主要是类&…

java peek函数_Java 8 Stream Api 中的 peek 操作

1. 前言我在 Java 8 Stream API中的 map 和flatMap 中讲述了Java8 Stream API中 map 操作和 flatMap 操作的区别。然后有小伙伴告诉我 peek 操作 也能实现元素的处理。但是你知道 map 和 peek 的区别吗? map 我们在开头文章已经讲过了,你可以去详细了解一…

iphone如何查看dns延迟_iPhone手机网速慢?1分钟教你设置DNS,网速立马翻一番

很多小伙伴在购机时选择苹果手机都是因为iOS系统的流畅度和精简性,但iPhone在可玩性和信号方面是不如安卓手机的。大家在使用过程中一定遇到过这样的情况,连接同一个无线网,但是苹果的网速总是要比安卓慢,这该怎么办呢&#xff1f…