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

C++ :顶层const与底层const的区别

顶层const与底层const的区别 

定义与核心区别
顶层 const (Top-level const)底层 const (Low-level const)
作用对象变量本身是常量(不可修改)变量指向或引用的对象是常量(不可修改)
典型场景指针本身不可变、普通变量为常量指针/引用指向的值不可变
是否影响类型不影响类型兼容性(如函数重载)影响类型兼容性(如函数重载、类型转换)
示例 1:指针中的顶层与底层 const
int a = 10;

// 底层 const:指向的值不可变(const 在左侧)
const int* p1 = &a;  // p1 可指向其他地址,但 *p1 不可修改
p1 = &a;             // 合法:修改指针地址
// *p1 = 20;         // 非法:底层 const 禁止修改值

// 顶层 const:指针本身不可变(const 在右侧)
int* const p2 = &a;  // p2 不可指向其他地址,但 *p2 可修改
// p2 = &a;          // 非法:顶层 const 禁止修改指针地址
*p2 = 20;            // 合法:修改指向的值

// 双重 const
const int* const p3 = &a;  // 指针和指向的值均不可变
示例 2:引用中的底层 const
int b = 30;
const int& ref = b;  // 底层 const:通过 ref 无法修改 b
// ref = 40;         // 非法
b = 40;              // 合法:直接修改原始变量

相关文章:

  • 【Linux网络(三)】网络基础套接字
  • 【CXX-Qt】1.5 使用CMake构建
  • 《深入理解AOP编程:从基础概念到Spring实现》
  • C++中std::shuffle 的使用
  • MySQL 多列 IN 查询详解:语法、性能与实战技巧
  • 当 Selenium 的 click() /send_keys()等方法失效时:JavaScript 在 UI 自动化测试中的神奇用法
  • 工作记录 2017-02-06
  • gitlab 提交pr
  • 搭建Nginx
  • springboot第三站(1) web开发引入
  • Docker下载,包含Win、Mac
  • The test of the entire book_《Effective Modern C++》notes
  • Spring Boot集成PageHelper:轻松实现数据库分页功能
  • Linux系统之qrencode工具的安装与基本使用
  • 云安全相关博客阅读(四)
  • 使用静态库动态库也要头文件
  • 【Netty】消息分发处理方式
  • Unity shader管道液体流入并流出效果
  • Spring Boot 静态访问配置属性的解决方案
  • EditRocket for Mac v5.0.2 文本编辑器 支持M、Intel芯片
  • 迪拜金融市场CEO:2024年市场表现出色,超八成新投资者来自海外
  • 李彦宏:技术迭代速度之快从业30年来未见过,要提升执行力战胜对手
  • 全国首例在沪完成,这项近视治疗手术不到10秒
  • 观察|22项达全球最优,世行为上海营商环境“盖章”
  • 山大齐鲁医院回应论文现“男性确诊子宫肌瘤”:给予该护士记过处分、降级处理
  • 铁路五一假期运输旅客发送量累计超1亿人次,今日预计发送2110万人次