1. 引言在编程世界中const是一个看似简单却极其重要的关键字。它用于声明常量即一旦初始化后其值便不可改变的变量。正确理解和使用const不仅能提升代码的可读性和可维护性还能帮助编译器进行优化减少潜在的错误。本文将带你从基础概念出发逐步深入const的各种应用场景与进阶技巧。2. 什么是 const 变量const是 “constant” 的缩写意为“常量”。在大多数编程语言中如 C、C、JavaScript、TypeScript、Rust 等const用于声明一个值不可被重新赋值的变量。2.1 基本语法以 JavaScript 为例constPI3.14159;PI3.14;// 报错Assignment to constant variable.以 C 为例constintMAX_SIZE100;MAX_SIZE200;// 编译错误assignment of read-only variable MAX_SIZE2.2 核心特性不可重新赋值一旦声明并初始化就不能再指向新的值。必须初始化声明时必须赋值否则编译/运行时报错。块级作用域在 JS 中与let类似const具有块级作用域。3. const 与 let / var 的区别在 JavaScript 中const、let、var三者常被对比关键字作用域可重新赋值可重复声明变量提升var函数级是是是undefinedlet块级是否是暂存死区const块级否否是暂存死区vara1;vara2;// 合法letb1;letb2;// 报错Identifier b has already been declaredconstc1;c2;// 报错Assignment to constant variable.4. const 的“不可变”陷阱const保证的是绑定不可变而非值不可变。对于对象和数组const只阻止重新赋值但允许修改其内部内容。constobj{name:Alice};obj.nameBob;// 合法可以修改属性// obj {}; // 报错constarr[1,2,3];arr.push(4);// 合法可以修改数组内容// arr []; // 报错如果需要真正冻结对象可以使用Object.freeze()constfrozenObjObject.freeze({name:Alice});frozenObj.nameBob;// 严格模式下报错非严格模式静默失败5. const 在 C/C 中的进阶用法在 C/C 中const的用法更加丰富常与指针结合形成多种组合。5.1 指针与 const 的四种组合intvalue10;constint*p1value;// 指向常量的指针不能通过 p1 修改 valueint*constp2value;// 常量指针p2 不能指向其他地址但可修改 valueconstint*constp3value;// 两者都不可变5.2 const 成员函数在类中const成员函数承诺不修改对象状态classCircle{private:doubleradius;public:Circle(doubler):radius(r){}doublegetArea()const{// const 成员函数return3.14159*radius*radius;}};6. const 在 TypeScript 中的类型推断TypeScript 中const与字面量类型结合可以产生更精确的类型推断constdirectionnorth;// 类型为 north字面量类型而非 stringletdir:north|south|east|westdirection;// 合法使用as const可以深度冻结对象的属性类型constconfig{apiUrl:https://api.example.com,retries:3}asconst;// config.apiUrl 的类型是 https://api.example.com而非 string7. 最佳实践与注意事项优先使用const只要变量不需要重新赋值就使用const这能减少意外修改。命名规范常量通常使用全大写加下划线如MAX_LIMIT或遵循团队约定。注意对象冻结需要真正不可变时结合Object.freeze()或使用不可变数据结构。避免魔法数字用const命名有意义的常量提升代码可读性。// 反例if(status200){...}// 正例constHTTP_OK200;if(statusHTTP_OK){...}8. 总结const变量是现代编程中不可或缺的工具。它通过“不可重新赋值”的约束帮助开发者写出更安全、更可预测的代码。理解const在不同语言中的细微差别尤其是对象引用与指针场景能让你在实战中游刃有余。记住核心原则能用const就用const让编译器帮你守住代码的边界。
企业数字化 ERP 产品动态
相关推荐
Git Worktree 并行多会话:Claude Code 开发效率提升实战 1. 为什么单会话模式正在拖垮你的开发效率 如果你现在还在一个终端窗口里跟 AI 编程助手一问一答,那你大概率已经感受到了那种"排队等回复"的窒息感。我最初用 Claude Code 的时候也是这样,一个会话跑到底,改完一个模块再改下一个&… · 2026/9/26 8:22:08
OpenClaw:企业微信原生自然语言文档自动化引擎 1. 项目概述:让企业微信真正“听懂人话”的文档自动化中枢OpenClaw 这个名字乍一听像某种开源机器人框架,但实际落地时你会发现,它根本不是在造轮子,而是在给企业微信装上一套能理解日常语言、自动执行文档类任务的“神经反射弧”… · 2026/9/26 8:22:08
RAG-Anything实战指南:多模态非结构化数据处理 1. 这不是又一篇“RAG入门科普”,而是一份能直接上手跑通多模态RAG-Anything的实战地图你搜过“RAG-Anything”这个词吗?搜完是不是发现:满屏都是标题党——“终极指南”“看这一篇就够了”“从入门到精通”,点进去却只有三行概念… · 2026/9/26 8:22:08
IPC-A-610J中文版电子组件验收标准:从焊点到组件的判定逻辑与实操解析 1. 电子组件可接受性标准的行业价值与版本演进
1.1 从“能用就行”到“一致性交付”的认知转变 干了十几年电子制造,我见过太多团队在样品阶段跑得飞快,一到批量就翻车。问题往往不出在设计上,而是出在“什么算合格”这件事没有统一语言。设… · 2026/9/26 8:57:08
昇腾Atlas部署YOLO全流程:从硬件认知到工程落地 这两年“atlas”这个词在AI部署圈子里出现的频率越来越高。你要是搜“atlas部署yolo”,能翻到一堆帖子;再搜“atlas 300v 24g 是运算加速卡吗”,说明很多人第一步就卡在硬件认知上。我去年开始把YOLO系列模型往昇腾Atlas平台上迁移࿰… · 2026/9/26 8:56:55
基于Python的数字图像处理实战:从环境搭建到指标量化 简介:一份基于Python的数字图像处理课程设计资源包,面向计算机视觉、图像分析方向的学习者及需完成相关课程设计的本专科学生。内容围绕OpenCV与Numpy展开,覆盖彩色图像灰度化、卷积与相关操作、高斯核平滑、二维傅里叶变换及中心化、谱图像分… · 2026/9/26 8:56:55
DeskcommCRM落地指南:从客户信息整理到日常使用 这段时间我一直在帮身边几个做电商和本地服务的朋友梳理客户管理流程,发现一个特别普遍的现象:客户资料散落在各自手机通讯录里,跟进记录要么在聊天记录里翻,要么在Excel里反复复制粘贴,售后处理更是靠群聊来去。说实话… · 2026/9/26 8:56:55
嵌入式Linux时钟框架实战:consumer API详解与调试指南 1. 从一次驱动调试说起:为什么通用时钟框架值得花时间啃很多做嵌入式Linux驱动的朋友,第一次接触clk相关代码,大概率是在改某个外设驱动的时候。比如调一个I2S音频接口,发现采样率死活对不上,最后定位到是某个时钟分频… · 2026/9/26 8:56:55
芋道BPM工作流初始化SQL实战:8张表设计、MySQL执行与避坑指南 简介:芋道源码 BPM 工作流模块的 MySQL 初始化脚本,面向使用 JDK17 构建业务系统的 Java 开发者,解决工作流引擎部署时数据库结构缺失的问题。压缩包共 2 个文件,包含 SQL 脚本与配套说明文档,整体仅 2KB,轻… · 2026/9/26 8:56:49
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46