C++中const关键字的用法

news2024/9/21 20:49:33

C语言和C++中const的不同

        首先我们需要区分一下C语言中的const和C++中的const,C语言中的const修饰的变量可以不初始化,但如果将一个变量定位为const类型还不初始化,那么之后就不能对这个变量直接赋值了。

        如果我们使用C语言中的const定义的变量指定数组的大小,那么就会直接报错,因为数组大小的初始化必须是一个常量,实际上在C语言中,const确实不是用来定义一个常量的,而是用来定义一个常变量的,只是这个变量的值不能被直接修改(通过指针还是可以修改这块内存的值的),除此之外这个变量和其他的C语言的变量没什么区别,甚至连编译生成指令的方式都是一样的。

        但是在C++中,const就是真正用来定义一个常量的,不进行初始化就会直接报错。

        这主要是因为常量的编译方式和变量的编译方式不同,常量在编译阶段会将整个程序中这个常量的名称都替换为这个常量的值,那么如果你在定义一个常量的时候,还不进行初始化的话,编译器就不知道要替换为什么值,自然就会直接报错了。

        用C++中的const修饰的变量可以初始化数组的大小,也说明了这个变量实际上是一个常量。

 

         当然了既然已经用const修饰作为常量了,那么这个变量就不能作为左值来使用了,毕竟你不能修改一个常量的值嘛。

        如果你按照下面这种方式在C++中定义一个const类型的变量,那么这个变量就直接退化为了C语言中的常变量了。

	int a = 10;
	const int p = a;
	return 0;

C++中的const配合一级指针使用 

 一般来说,在C++中const配合一级指针使用有四种形式。

	const int *p
	int const* p;
	int* const p;
	const int* const p;

const的修饰作用

那么很多人其实分不清这上面四种const用法所产生的效果,实际上,在C++中const修饰的是离它最近的类型。

比如const int *p,这个const显然修饰的是int类型,也就是*p,p本身是一个int*类型的,*p就是int类型嘛,代表*p不能被改变。

int const *p,这个const离int最近,所以也是修饰int类型,同样是*p,代表*p不能被改变,也就是指针所指向的值不能改变。

int *const p的const就是离int *最近了,所以修饰的是int*类型,也就是p,代表p所指向的地址不能改变。

const int * const p有两个const,离第一个const最近的是int,离第二个const最近的是int *,所以第一个const修饰的是*p,代表*p不能改变,第二个const修饰的是p,代表p不能改变,所以呢,这个指针所指向的值不能被修改,指向的地址也不能被修改。

const的类型转换

对于const的类型转换,我们需要知道一个原则,那就是const的右边如果没有指针符号的话,const不参与类型之中。

	int* q;
	int* const p;
	const int* w;

int *q的类型是int *,int *const p的类型也是int *,因为const的右边没有*号,所以const不参与类型中,而const int *w的类型就是const int*了,因为const的右边存在*号。

另外呢,从int *是可以转换到const int *的,但是const int *不能转换为int *,否则不就代表你可以修改这个指针所指向的值了吗。

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

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

相关文章

error: resource android:attr/lStar not found

项目打正式包的提示resource android:attr/lStar not found,后来分析发现android:attr/lStar属性在androidx.core:core的包里面,然后便试着降低androidx.core:core的版本号,降低后发现还是报错,查看错误信息发现androidx.core:cor…

安装nodejs服务器

Java项目可以运行在tomcat服务器,开始完成前后端完全分离。前端有自己独立的工程。我们需要把前端独立的工程运行起来。 运行在nodejs服务器下。 验证是否安装成功:敲cmd--输入node --version 1.安装npm java项目需要依赖jar,安装maven。前端项目也需要依…

《Advanced RAG》-07-探索 RAG 中表格数据的处理方案

摘要 本文详细讨论了实现 Retrieval-Augmented Generation(RAG)时对表格进行处理的挑战,特别是在非结构化文档中自动准确地提取和理解表格信息。 首先介绍了RAG中管理表格的关键技术,包括表格解析和索引结构设计。 接着&#xff0…

PXE批量安装操作系统

PXE批量安装操作系统 系统环境rhedhat7.9关闭vmware内的dhcp服务 kickstart自动安装脚本的制作 在rhel7系统中提供图形的kickstart制作方式 在rhel8中已经把图形的工具取消,并添加到rhn网络中 在rhel8中如果无法通过rhn网络制作kickstart,可以使用模板…

LlamaIndex 实现 React Agent

React Agent 是指 LLM 对问题自行推理并调用外部工具解决问题,如下图所示,通过一些推理步骤最终找到想要的答案。 LlamaIndex 提供了实现 React Agent 的框架,通过框架可以轻松的实现上图中的步骤。那么,如果不用 LlamaIndex 应该…

【轻松面试】Java中的迭代器

Java中的迭代器 一、迭代器的基本方法 二、示例解释 三、注意事项 🎈边走、边悟🎈迟早会好 在 Java 中,迭代器(Iterator)是一种用于遍历集合(如 List、Set 等)元素的对象。迭代器提供了一种通…

6款超好用的图纸加密软件推荐(为图纸加密软件披上隐形铠甲!)

场景设定: 一个阳光明媚的下午,在创意满满的设计工作室里,李明和小张正围坐在会议桌旁,讨论着如何更好地保护他们精心设计的图纸不被泄露。 李明(眉头紧锁):“小张啊,最近咱们的项目…

C# Unity 面向对象补全计划 七大原则 之 接口隔离原则 (ISP) 难度:☆ 总结:大接口分成小的,然后该干啥干啥

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识,看不懂没关系 请看专栏:http://t.csdnimg.cn/mIitr,查漏补缺 1.接口隔离原则 (ISP) 这…

按钮类控件

目录 1.Push Button 代码示例: 带有图标的按钮 代码示例: 带有快捷键的按钮 代码示例: 按钮的重复触发 2.Radio Buttion 代码示例: 选择性别 代码示例: click, press, release, toggled 的区别 代码示例: 单选框分组 3.3 Check Box 代码示例: 获取复选按钮的取值 1.Pu…

sql注入sqli-labs第一关

目录 sql注入是什么? sqli-labs第一关--字符型注入 思路:想要利用连表查询 进一步思考如何逃脱单引号 如何知道表的列数 最终目的:注入管理员账号密码 sql注入是什么? 注入:都是合理合法的MySQL执行语句 产生的原…

PXE学习及其简单应用

一、PXE 的定义 PXE 是一种基于网络的启动技术,最初由 Intel 开发,旨在提供一种在没有本地存储设备的情况下通过网络启动操作系统的标准。PXE 集成在计算机的 BIOS 或 UEFI 中,允许计算机从网络服务器下载并启动操作系统或其他软件。 二、PX…

C#学习笔记12:SYN6288语音模块_Winform上位机控制软件

今日尝试使用C# Winform写一个上位机软件控制 SYN6288语音模块 这里不讲什么基本原理(或者讲的比较略简),直接讲实现了就...... 文章提供测试代码讲解、测试效果图、整体测试工程下载 目录 控件的摆放: SYN6288介绍: 代码编程: 对16进制发送…

一款绿色免费免安装的hosts文件编辑器

BlueLife Hosts Editor 是一款免费的 Hosts 文件编辑工具,主要用于管理和修改电脑系统的 Hosts 文件。该软件具有多种功能,包括添加、删除和更新域名记录,以及调整 IP 与网域名称的交叉对应关系,类似于 DNS 的功能。 该软件特别适…

鸿蒙应用服务开发【华为账号服务】

Account Kit 介绍 本示例展示了使用Account Kit提供的登录、授权头像昵称、实时验证手机号、收货地址、发票抬头、未成年人模式的能力。 本示例模拟了在应用里,调用一键登录Button组件拉起符合华为规范的登录页面;调用获取头像昵称接口获取头像昵称&a…

七天打造一套量化交易系统:Day8-阶段性总结、未完待续...

七天打造一套量化交易系统:Day8-阶段性总结、未完待续... 阅读数据分析私信情况汇总如何收费代写策略功能拓展商务合作如何联系我 下一阶段规划 从 2024-07-18 准备进行【七天打造一套量化交易系统】系列分享,到昨天(2024-08-04)&…

【Kubernetes】k8s集群的pod基础

目录 一.Pod概述 1.什么是pod 2.k8s中pod的两种使用方式 3.pod容器的常规使用流程 4.创建pod的3种方式 二.Pod中容器概述 1.容器分类 2.Pod容器的3种镜像拉取策略 3.Pod容器的3种重启策略 4.pod的dns策略 一.Pod概述 1.什么是pod Pod是kubernetes中最小的资源管理组…

登录相关功能的优化【JWT令牌+拦截器+跨域】

登录相关功能的优化 登录后显示当前登录用户el-dropdown: Element - The worlds most popular Vue UI framework <el-dropdown style"float: right; height: 60px; line-height: 60px"><span class"el-dropdown-link" style"color: white;…

【香橙派系列教程】(八)一小时速通Python

【八】一小时速通Python 本章内容服务于香橙派下的开发&#xff0c;用C语言的视角来学习即可&#xff0c;会改就行。 详细说明&#xff0c;请看链接:python全篇教学 Python是一种动态解释型的编程语言&#xff0c;Python可以在Windows、UNIX、MAC等多种操作系统上 使用&…

codetop标签双指针题目大全解析(C++解法),双指针刷穿地心!!!

写在前面&#xff1a;此篇博客是以[双指针总结]博客为基础的针对性训练&#xff0c;题源是codetop标签双指针近一年&#xff0c;频率由高到低 1.无重复字符的最长子串2.三数之和3.环形链表4.合并两个有序数组5.接雨水6.环形链表II7.删除链表的倒数第N个节点8.训练计划II9.最小覆…

SMU Summer 2024 div2 4th

文章目录 The Fourth Week一、前言二、算法1.最近公共祖先lca倍增算法2.Dijkstra算法<1>&#xff08;游戏&#xff09; 3.拓扑排序3. Bellman-Ford算法4. SPFA算法 三、总结 The Fourth Week 不须计较苦劳心&#xff0c;万事原来有命。 ————宋朱敦儒《西江月世事短如…