c++中的const关键字用法总结 常量成员和常量函数【代码规范】

发布时间 - 2025-12-30 00:00:00    点击率:
const本质是表达“不可修改性”的契约,贯穿变量、指针、函数参数、成员函数及返回值;正确使用可提升安全性、可读性与编译器优化能力。

const 在 C++ 中不只是“定义常量”那么简单,它本质是表达“不可修改性”的契约,贯穿变量、指针、函数参数、成员函数、返回值等各环节。用好 const 能提升代码安全性、可读性和编译器优化空间,也是专业 C++ 代码规范的重要体现。

const 变量与常量表达式

声明后不可修改的变量,必须初始化;若用于数组大小、模板非类型参数等场景,则需是编译期可知的常量表达式(constexpr 更严格):

  • int const x = 42; // 等价于 const int x = 42;
  • constexpr int N = 10; // 编译期常量,可用于 int arr[N];
  • const int y; // ❌ 错误:未初始化

const 指针与指针 const —— 位置决定含义

const 修饰的是紧邻其**左侧**的类型(若左侧无类型,则修饰右侧),关键分清“指针本身不可变”还是“指针所指内容不可变”:

  • int* const p1 = &x; // p1 不可改指向(指针 const),但 *p1 可改
  • const int* p2 = &x; // *p2 不可改(内容 const),但 p2 可改指向
  • const int* const p3 = &x; // 两者都不可改

const 成员函数:承诺不修改对象状态

在成员函数声明末尾加 const,表示该函数不会修改类的任何非 mutable 成员。这使 const 对象也能调用它,并支持 const 引用/指针调用:

  • int getValue() const { return val; } // ✅ 合法:只读访问
  • void setValue(int v) { val = v; } // 非 const 函数
  • void foo() const { val++; } // ❌ 错误:试图修改非 mutable 成员
  • mutable int cache; // 可在 const 函数中修改

const 参数与返回值:明确接口契约

函数参数用 const 引用或指针,避免意外修改且避免拷贝开销;返回 const 值通常无意义(临时对象本就不能赋值),但返回 const 引用/指针可防止赋值或修改底层数据:

  • void process(const std::string& s); // 推荐:安全 + 高效
  • const std::string& getName() const; // 允许返回引用,禁止通过返回值修改
  • const int getID() const; // 不推荐:const 返回值对内置类型无实际作用


# c++  # 代码规范  # String  # 常量  # 成员函数  # const  # 无类型  # int  # void  # mutable  # 指针  # 接口  # 对象  # 返回值  # 的是  # 也能  # 可在  # 就不能  # 中不  # 用好  # 无意义  # 则需  # 可用于 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  网站优化排名时,需要考虑哪些问题呢?  JavaScript如何实现倒计时_时间函数如何精确控制  Laravel如何配置任务调度?(Cron Job示例)  如何快速查询域名建站关键信息?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  如何在橙子建站上传落地页?操作指南详解  昵图网官网入口 昵图网素材平台官方入口  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  bing浏览器学术搜索入口_bing学术文献检索地址  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Laravel如何使用Blade模板引擎?(完整语法和示例)  linux top下的 minerd 木马清除方法  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何做网站制作流程,*游戏网站怎么搭建?  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何确认建站备案号应放置的具体位置?  如何在阿里云虚拟主机上快速搭建个人网站?  如何用景安虚拟主机手机版绑定域名建站?  Laravel如何实现API速率限制?(Rate Limiting教程)  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Laravel如何使用Service Container和依赖注入?(代码示例)  javascript基本数据类型及类型检测常用方法小结  历史网站制作软件,华为如何找回被删除的网站?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel distinct去重查询_Laravel Eloquent去重方法  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  WordPress 子目录安装中正确处理脚本路径的完整指南  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  使用Dockerfile构建java web环境  如何在阿里云完成域名注册与建站?  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  如何在橙子建站中快速调整背景颜色?  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  lovemo网页版地址 lovemo官网手机登录  南京网站制作费用,南京远驱官方网站?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  如何在景安服务器上快速搭建个人网站?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  如何在宝塔面板中修改默认建站目录?