当前位置: 首页 > article >正文

C++顶层const与底层const

顶层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.kler.cn/a/387842.html

相关文章:

  • git之 revert和rebase
  • 后端:Aop 面向切面编程
  • 基于MATLAB+opencv人脸疲劳检测
  • 零基础玩转IPC之——海思平台实现P2P远程传输实验(基于TUTK,国科君正全志海思通用)
  • ESLint 使用教程(七):ESLint还能校验JSON文件内容?
  • 综合案例铁锅炖(CSS项目大杂烩)
  • 【需求变更】使用 Redis 和 Lua 脚本实现变更后方案编号的生成
  • Linux下通过sqlplus连Oracle提示字符是乱码▒▒▒[
  • 什么是 eCPRI,它对 5G 和 Open RAN 有何贡献?
  • 设计模式-七个基本原则之一-迪米特法则 + 案例
  • 【WRF模拟】全过程总结:WPS预处理及WRF运行
  • Mybatis拦截器中获取@RequestBody表单的值修改查询SQL
  • redis的部署方式详解
  • 「QT」几何数据类 之 QLine 整型直线类
  • IP可用端口扫描器工具(bun + typescript)
  • Debezium系列之:Debezium 中的增量快照
  • 数据结构之排序--选择排序详解
  • MATLAB和Python多语高维转录分析
  • 在 Vue 中实现与优化轮询技术
  • JMeter基础篇
  • react useRef
  • 水库汛限水位是什么?如何进行安全监测
  • Android HandlerThread 基础
  • 修复 Ubuntu中 “Command ‘python’ not found” 的错误
  • 软件工程概论项目(一),git环境的配置和平台代码的拉取
  • 电子设计竞赛准备经历分享