C++顶层const与底层const

server/2024/11/12 22:50:12/

顶层const意味着被修饰的对象本身是一个常量。

顶层const可以用来修饰基本数据类型(如int、float等)和自定义类型(如结构体、类等)的对象。
顶层const修饰的对象的值不能被修改,但是该对象可以被赋予另一个值(如果它是可以被赋值的对象,例如非引用类型的变量)。对于指针来说,如果它是顶层const,那么指针本身(即指针的地址)不能被改变,但指针所指向的内容可以改变。

当顶层const修饰一个指针时,它表示的是指针本身(即存储的地址)是一个常量,不能指向其他地址。但请注意,这并不影响指针所指向的数据内容是否可以被修改!

    const int b = 42;//ci的值不能改变,const是顶层的int i = 10;int* const p = &i;//p是const顶层指针,p的值(即p指向的地址不能修改),但是*p(p指向的内容)可以修改*p = 8;

底层const表示被const修饰的值或对象所指向的内容是不可修改的,即无法通过该指针或引用来改变其所指向对象的值。

底层const主要用来修饰指针或引用类型。
对于指针来说,如果它是底层const,那么指针所指向的内容不能被修改,但指针本身(即指针的地址)可以改变。这意味着你可以让指针指向另一个对象,但不能通过该指针修改它所指向的对象的值。

int x = 10;
const int* p = &x;//底层const指针
*p = 5;//错误表达式必须是可修改的左值

区分顶层还是底层:(以右为尊)
指针类型:对于指针来说,可以通过const关键字在符号的位置来判断是顶层const还是底层const。如果const在符号的左边,那么它是底层const;如果const在符号的右边(或者没有“”符号,直接修饰变量),那么它是顶层const。

int* const p = &a;//p是顶层const指针,p的值不可以修改,但*p可以修改
const int* p = &a;//p是底层const指针,*p不可以修改,但p的值可以修改


引用类型:对于引用来说,由于引用一旦被初始化后就不能改变其指向的对象,因此所有的const引用都可以看作是底层const。这是因为引用本身就像是一个“常量指针”,其指向的对象在初始化后就不能被改变(尽管引用的语法和指针不同,但在这个上下文中可以这样理解)。


http://www.ppmy.cn/server/140998.html

相关文章

股民情绪识别的LSTM-NBM混合模型

大家好,我是带我去滑雪! 利用之前爬取2023年10月17日至2024年7月13日的65万余条东方财富网的上证指数股吧的股民评论数据,基于jieba库对股民情绪进行识别,在进行中文分词、去除停用词、合并同义词和长短句分离后,对长文…

备忘录模式:保存对象状态的设计模式

1. 引言 在软件开发中,常常需要保存一个对象的状态,以便将来能够恢复到该状态。在某些情况下,这种需求显得尤为重要,例如在撤销操作、版本控制以及游戏进度保存等场景中。备忘录模式(Memento Pattern)正是…

Python 数据可视化详解教程

Python 数据可视化详解教程 数据可视化是数据分析中不可或缺的一部分,它通过图形化的方式展示数据,帮助我们更直观地理解和分析数据。Python 作为一种强大的编程语言,拥有丰富的数据可视化库,如 Matplotlib、Seaborn、Plotly 和 …

react 类组件和函数组件区别

一 类组件需要使用this关键字来访问props和状态,而函数组件则可以直接访问这些值。原来只有类组件可以使用的特性,比如状态和生命周期方法,现在函数组件通过Hooks也可以使用。函数组件通常更简洁,更易于测试和理解。类组件目前仍…

什么是红黑树

红黑树是一种自平衡的二叉查找树,在计算机科学中常用于组织数据,如数字块等,其典型的用途是实现关联数组。以下是对红黑树的详细介绍,以及左旋、右旋、变色等操作的解析: 一、红黑树简介 起源与命名:红黑树…

算法训练(leetcode)二刷第二十一天 | 491. 非递减子序列、*46. 全排列、*47. 全排列 II、D

刷题记录 491. 非递减子序列*46. 全排列*47. 全排列 IID 491. 非递减子序列 leetcode题目地址 题目提供的数据有重复,但结果集中不可有重复组合,且不允许排序,因此需要借助Set或额外的hash表进行标记当前层是否使用了相同元素。 时间复杂度…

SSRF〈2〉

SSRF的进阶 1.Gopher协议的利用 1.gopher协议可以通过url指向指定IP端口发送任意内容&#xff0c;模拟大多数TCP协议&#xff0c;是SSRF中的一把利刃。 gopher协议URL&#xff1a; gopher://<host>:<port>/_<url编码的TCP数据> 这个url编码的TCP数据是goph…

华为HarmonyOS借助AR引擎帮助应用实现虚拟与现实交互的能力3-获取设备位姿

设备位姿描述了物体在真实世界中的位置和朝向。AR Engine提供了世界坐标下6自由度&#xff08;6DoF&#xff09;的位姿计算&#xff0c;包括物体的位置&#xff08;沿x、y、z轴方向位移&#xff09;和朝向&#xff08;绕x、y、z轴旋转&#xff09;。通过AR Engine&#xff0c;您…