C++中的const常量-->‘only read,can‘t change‘

2024年1月22日  ///昨天外面下雨地没干,骑车摔得好结实,,,

2024年1月23日  内容整理自The Cherno:C++系列

这个关键字确实有点难,看了好几遍原视频整理出来的知识框架,还需要加以练习

---------------------------------------------------------------------------------------------------------------------------------

(一)const在变量中的使用

  • 字面常量

所谓字面常量,就是直接给出的数据,例如123、-56、1.414等等

  • 符号常量

所谓符号常量,就是给字面常量取一个名称,于是在使用该常量的地方就可以直接使用这个名称来代替。例如,pi常常可以给3.141592653..取名,这样编写的程序可读性高。

const变量不可修改

 

上面是可以运行的;但如果把7行的int a=5修改成const,就会报错。

 

------------------------------------------------------------------------------------------------------------------------------

(二)const在指针中的使用 

现在让我们在上述的基础程序上添加const关键字,以此来看看const究竟有什么用

1.const int * a=new int;

const int * a=new int;//这意味着你不能修改指针指向地址里变量的内容,但是可以改变指针a指向的位置

注意:const int *a=new int  这样的写法等价于int const * a=new int;

2.int * const a=new int;

int* const a=new int;//const加到*号之后意味着,不可以改变指针a的指向,但是可以改变a指向的内容

3. const int * const a=new int;

既不能改变指针指向的内容,也不能改变指针本身使其指向其他位置

-------------------------------------------------------------------------------------------------------------------------------

(三)类的成员函数加上const修饰符有两个作用

  • 在const成员函数定义的地方,告诉编译器这个成员函数不应该改变数据成员的值

  • 在调用const成员函数的地方,告诉编译器该成员函数不会改变对象数据成员的值 

在程序运行的某个时刻,一个对象的所有数据成员的值反映了这个对象在该时刻的状态

常常把对象的成员函数分为2类:

  • 修改对象状态的成员函数(write)
  • 获取对象状态的成员函数   (read)

从概念上讲,一个成员函数只要不修改对象数据成员的值,它就是一个获取对象状态的成员函数。但是,从实现的角度来讲,有时候因为疏忽,在实现一个获取对象状态的成员函数时无意中修改了数据成员的值,这时,如果把该成员函数当做获取对象状态的成员函数来使用,就会产生程序语义上的错误。

为了解决 上面的问题,C++提供了const成员函数机制,即,在定义一个成员函数时,可以为它加上一个const说明,表示它是一个获取对象状态的常成员函数(const member function)

上面的函数f()就是一个const成员函数,在其函数体中不能修改数据成员的值,如果在f中修改了数据成员的值,编译器会警告这个错误

---------------------------------------------------plus------------------------------------------------------------------------

const有点像类和结构体的visibility,

const是一个让我们的代码更干净的机制,并对开发人员写代码强制特定的规则,

const基本上就像你作出的承诺,

-----它承诺某些东西将是不变的,

something is going to be constant,that means it's not going to change.

(显然,你也可以在现实生活中打破你的承诺,但是我们更喜欢言出必行的人)

‘const’ is a promise,it promise something to be constant,which means it will not change,and whether or not to keep that promise is kind of up to you.

and the reason that we want to keep our promise is this can actually help to simplify our code a lot.

It actually has a lot of benefits.

---------------------------------------------------------------------------------------------------------------------------------

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

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

相关文章

【AI视野·今日Robot 机器人论文速览 第七十五期】Thu, 11 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Thu, 11 Jan 2024 Totally 16 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Analytical Model and Experimental Testing of the SoftFoot: an Adaptive Robot Foot for Walking over Obstacles and Irre…

spawn_group_template | spawn_group | linked_respawn

字段介绍 spawn_group | spawn_group_template 用来记录与脚本事件或boss战斗有关的 creatures | gameobjects 的刷新数据linked_respawn 用来将 creatures | gameobjects 和 boss 联系起来,这样如果你杀死boss, creatures | gameobjects 在副本重置之前…

「我在淘天做技术」智能对话新纪元:百万日活对话机器人的 LLM 落地实践

作者:智能小蜜团队 一、前言 阿里小蜜家族(阿里小蜜、店小蜜、万象),从 2015 年发展至今,已经成为了覆盖淘天 P-C(平台-消费者)、B-C(商家-消费者)、P-B(平台…

【明道云】【企业数字化】如何将明道云的数据直连SmartBi使用

【背景】 明道云优势在于上传和企业内部流程的系统化,换句话说,是产生数据的部分。 SmartBi优势在于生成报表和即席查询等,是使用沉淀数据的部分。 如果能将这两部分的数据打通,可以大大扩展企业数字化框架的覆盖范围。让这两套平…

【Linux】Linux进程信号(下)

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:Linux 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【Linux】…

独步IT界,开放API接口文档新标杆!

目录 1、简介 1.1 什么是API接口 1.2 为什么开放API接口 1.3 API接口的优势和应用领域 1.4 API接口的基本原则和设计准则 2、接口认证 2.1 认证方式和流程 2.2 API密钥的生成和管理 2.3 认证错误处理 3、接口调用 3.1 请求方法和URL规范 3.2 请求参数和格式 3.3 响…

遍历子网所有ip地址,寻找空闲ip

在cmd窗口下输入如下代码: for /l %i in (1,1,255) do ping -n 1 -w 60 10.183.27.%i | find "Reply" >> d:\pingall27.log 得到如下结果 上图中,有reply的代表该IP已经被占用。但是观察红框中 22-->25之间缺少23 24 则说明23/24 是…

ChatGPT到底好不好用?相比于搜索引擎的优势

在数字化时代,获取信息的方式正经历着翻天覆地的变化。搜索引擎曾经是我们获取信息的首选工具,但现在,随着人工智能技术的飞速发展,ChatGPT等智能聊天机器人正在逐渐改变我们搜索和处理信息的方式。那么,ChatGPT到底好…

宿舍安全用电监模块

学校宿舍安全用电监测模块是针对 0.4kV 以下的 TT、TN 系统设计的智能电力装置,具有单、三相交流电测量、四象限电能计量、谐波分析、开关量输入、继电器输出功能,以及 RS485 通讯或 GPRS 无线通讯功能,通过对配电回路的剩余电流、导线温度等…

理想架构的Doherty功率放大器理论与仿真

Doherty理论—理想架构的Doherty功率放大器理论与仿真 参考: 三路Doherty设计 01 射频基础知识–基础概念 ADS仿真工程文件链接:理想架构的Doherty功率放大器理论与仿真 目录 Doherty理论---理想架构的Doherty功率放大器理论与仿真0、Doherty架构的作用…

神经网络算法与逻辑回归:优势与差异

神经网络算法和逻辑回归都是预测模型中的重要工具,但它们在处理复杂和非线性问题时表现出不同的性能。本文将深入探讨神经网络算法相对于逻辑回归的优势,以及它们在不同场景下的适用性。 一、引言 神经网络算法和逻辑回归都是预测模型中的重要工具&…

Python - argparse模块

python中的argparse模块,用于命令后参数解析,方便测试,是python中自带的模块。 可以自动生成帮助文档,和使用手册。而且当用户在执行程序的时候,输入无效的参数时,会给出对应的错误信息。 使用方法&#…

贪吃蛇(C)

游戏背景:贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅块,扫雷等游戏位列经典游戏的⾏列。 总: 游戏设计大纲: 使⽤C语⾔在Windows环境的控制台中模拟实现经典⼩游戏贪吃蛇。 实现的基本功能: 1、贪吃蛇地图绘制…

自己构建webpack+vue3+ts

先看看我的目录结构(我全局使用TS): 一、安装配置webpack打包 安装esno npm install esnoesno 是基于 esbuild 的 TS/ESNext node 运行时,有了它,就可以直接通过esno *.ts的方式启动脚本,package.json中添加 type:…

echarts绘制饼图,部分数据隐藏指示线和文本,hover时隐藏指示线和文本的类别也不显示tooltip提示

option {tooltip: {trigger: item,formatter: (p) > {if (p.name) {return ${p.name}:${p.value}个;}},backgroundColor: #ffffff,textStyle: { color: #666666 } // 提示标签字体颜色},legend: {top: 5%,left: center},series: [{name: Access From,type: pie,…

【机组】指令控制模块实验的解密与实战

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《机组 | 模块单元实验》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 ​ 目录 🌺一、 实验目…

重叠柱状图做法,全程动图演示

最终效果: 具体步骤: 其他图形画法: 点线对比图做法,全程动图演示 气泡图做法,全程动图演示 重叠柱状图做法,全程动图演示 瀑布图做法,全程动图演示 对称图做法,全程动图演示

[Tomcat] [最全] 目录和文件详解

打开tomcat的解压之后的目录可以看到如下的目录结构: Bin bin目录主要是用来存放tomcat的命令,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命令)。 …

npm或者pnpm或者yarn安装依赖报错ENOTFOUND解决办法

如果报错说安装依赖报错,大概率是因为npm源没有设置对,比如我这里安装protobufjs的时候报错:ENOTFOUND npm ERR! code ENOTFOUND npm ERR! syscall getaddrinfo npm ERR! errno ENOTFOUND npm ERR! network request to https://registry.cnpm…

小白水平理解面试经典题目LeetCode 594 最大和谐字符串

594 最大和谐字符串 这道题属于字符串类型题目,解决的办法还是有很多的,暴力算法,二分法,双指针等等。 题目描述 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在,给你一个整数数组 nums …