news 2026/4/16 19:05:49

15. const

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
15. const

1.基础用法

2.核心难点: const 修饰指针

3.const 修饰函数参数

4.const 修饰类成员函数

5.const 修饰函数返回值


1.基础用法

最基础的用途是定义"只读变量",本质是带类型的常量,相比C语言的#define有明显优势,有类型检查、遵守作用域规则
#include <iostream>usingnamespacestd;intmain(){// 定义const常量,必须初始化(一旦定义不可修改)constintMAX_SIZE=100;// MAX_SIZE = 200; // 错误!编译器会直接报错:不能修改const变量// 对比#define(无类型检查,预处理阶段直接替换)#definePI 3.14159// PI = 3.14; // 错误,但报错原因是“赋值给常量”,而非类型问题cout<<"MAX_SIZE: "<<MAX_SIZE<<endl;cout<<"PI: "<<PI<<endl;return0;}
a.const常量必须在定义时初始化(因为后续无法修改)b.const常量有明确的类型(int/double),编译器会做类型检查,而#define只是文本替换,无类型 c.const常量遵守作用域(比如局部const只在函数内生效),#define是全局生效(直到#undef)

2.核心难点: const 修饰指针

const修饰指针有三种常见场景,核心是区分"指向的内容不可改""指针本身不可改"

#include <iostream>usingnamespacestd;intmain(){inta=10,b=20;// 场景1:const int* p(指向常量的指针)constint*p1=&a;// *p1 = 100; // 错误:不能修改指向的内容p1=&b;// 正确:指针本身可以指向其他地址// 场景2:int* const p(常量指针)int*constp2=&a;*p2=100;// 正确:可以修改指向的内容// p2 = &b; // 错误:指针本身不能指向其他地址// 场景3:const int* const p(都只读)constint*constp3=&a;// *p3 = 100; // 错误// p3 = &b; // 错误cout<<"a: "<<a<<endl;// 输出:100return0;}


3.const 修饰函数参数

const修饰函数参数的核心目的是:"防止函数内部意外修改传入的参数, 尤其适合大对象(如字符串、类对象)结合引用使用"
#include <iostream>#include <string>usingnamespacestd;// const修饰普通参数(值传递):意义不大(因为参数是拷贝,修改不影响原变量)voidprintNum(constintnum){// num = 100; // 错误:不能修改const参数cout<<"Num: "<<num<<endl;}// const修饰引用参数(重点):避免拷贝+防止修改原对象voidprintStr(conststring&str){// str = "hello"; // 错误:不能修改const引用的内容cout<<"Str: "<<str<<endl;}intmain(){printNum(5);printStr("world");return0;}

4.const 修饰类成员函数

const放在类成员函数的末尾,表示:"该函数不会修改类的任何成员变量(除非成员变量被mutable修饰), 只能调用其他const成员函数"
#include <iostream>usingnamespacestd;classPerson{private:stringname;mutableintage;// mutable:即使在const函数中也能修改public:Person(stringn,inta):name(n),age(a){}// const成员函数:不能修改普通成员变量stringgetName()const{// name = "Tom"; // 错误:不能修改非mutable成员age=20;// 正确:mutable成员可以修改returnname;}// 普通成员函数:可以修改所有成员voidsetName(stringn){name=n;}};intmain(){constPersonp("Jerry",18);// const对象// p.setName("Bob"); // 错误:const对象只能调用const成员函数cout<<p.getName()<<endl;// 正确:调用const成员函数return0;}

5.const 修饰函数返回值

const修饰返回值的核心目的是:"防止返回值被意外修改, 常见于返回指针/引用的场景"
#include <iostream>usingnamespacestd;// 返回const int:防止返回值被修改(值传递意义不大)constintadd(inta,intb){returna+b;}intmain(){intres=add(3,5);// 正确:可以赋值给普通变量// add(3,5) = 10; // 错误:不能修改const返回值cout<<res<<endl;// 输出:8return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 19:31:12

一键部署:BGE-Large-Zh中文语义分析工具使用指南

一键部署&#xff1a;BGE-Large-Zh中文语义分析工具使用指南 你是否试过把“苹果公司股价”和“红富士苹果多少钱一斤”扔进同一个搜索框&#xff0c;结果系统却一脸茫然&#xff1f;是否在搭建本地知识库时&#xff0c;反复调试向量模型却卡在环境配置、GPU识别或中文分词适配…

作者头像 李华
网站建设 2026/4/3 23:57:49

Janus-Pro-7B保姆级部署教程:从安装到多模态应用

Janus-Pro-7B保姆级部署教程&#xff1a;从安装到多模态应用 1. 为什么你需要Janus-Pro-7B 你有没有遇到过这样的问题&#xff1a;想让AI既看懂一张产品图&#xff0c;又能根据这张图生成营销文案&#xff1b;或者输入一段文字描述&#xff0c;直接生成配套的配图和短视频脚本…

作者头像 李华
网站建设 2026/4/16 23:59:31

HY-Motion 1.0企业实践:工业培训VR系统中标准操作流程动作建模

HY-Motion 1.0企业实践&#xff1a;工业培训VR系统中标准操作流程动作建模 在制造业一线&#xff0c;新员工掌握设备启停、安全巡检、故障处置等标准操作流程&#xff08;SOP&#xff09;&#xff0c;往往需要反复观看视频、跟随师傅实操、再经多次考核——平均耗时72小时&…

作者头像 李华
网站建设 2026/4/16 19:05:07

IndexTTS-2-LLM中文合成效果差?语言模型微调实战教程

IndexTTS-2-LLM中文合成效果差&#xff1f;语言模型微调实战教程 1. 为什么你的IndexTTS-2-LLM中文听起来“怪怪的” 你是不是也遇到过这种情况&#xff1a;刚部署好IndexTTS-2-LLM&#xff0c;输入一段中文&#xff0c;点下“&#x1f50a; 开始合成”&#xff0c;结果听出来…

作者头像 李华
网站建设 2026/4/13 13:16:51

告别重复肝度!AI助手如何重构你的原神体验

告别重复肝度&#xff01;AI助手如何重构你的原神体验 【免费下载链接】better-genshin-impact &#x1f368;BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动派遣 | 一键强化 - UI Automation Testing Tools For Genshin Im…

作者头像 李华
网站建设 2026/4/14 18:41:38

腾讯开源翻译模型Hunyuan-MT-7B:5分钟搭建你的翻译API

腾讯开源翻译模型Hunyuan-MT-7B&#xff1a;5分钟搭建你的翻译API 1. 为什么你需要这个模型——不是又一个“能翻就行”的翻译工具 你有没有遇到过这些场景&#xff1a; 客户发来一封藏语合同&#xff0c;你翻遍所有在线服务都找不到支持&#xff1b;团队要本地化一款App到哈…

作者头像 李华