const小结:
1,const的引入:
因为预处理只做文本替代,它既没有类型检查思想,也没有类型检查工具,所以预处理器的值替代会产生一些微小的问题,这些问题在c++中可以通过使用const而避免。
2,c++编译器通常并不为const分配空间,它把这个定义保存在符号表中。当const常量被使用时,编译的时候就进行常量折叠。有一些情况会强制编译器进行存储空间分配:
(1),使用extern
(2),需要取一个const的地址
3,const是默认内部连接的,可使用extern改变它。
4,用const定义的常量必须进行初始化,而且初始化必须在定义的地方。
5,const可以用于集合,但编译器不能把一个集合存放在他的符号表中,所以必须分配内存。此时,const意味着“不能改变的一块存储空间“。然而,其值在编译时不能使用,因为编译器在编译时不需要知道存储的内容。
6,在c中const的意思是“一个不能被改变的普通变量“,在c中它总是占用存储空间而且它的名字是全局符。
即: const bufsize = 100;
char buf[bufsize]; // 是不对的,因为bufsize占用存储的某个地方,c编译器不知道它在编译时的值。
7,const与指针
(1) const int* x; 等同于 int const * x;
注:x指向的数据为const,x本身不是
int* const x; x为const的,x指向的数据不是;
(2) 我们可以把一个非const对象的指针赋给一个const对象的指针;但不可以把一个const对象的指针赋给一个非const对象的指针
即: int d = 1;
const int* v = &d; // that's ok!
d++; // that's ok!
//! (*v)++; //illegal
const int e = 3;
//! int* w = &e; // illegal
8,const类型的函数参数和返回值
(1),用const限定的参数表示该参数在函数内是不可修改的.
(2),返回值为const,限定了该返回值不能用做左值
9,临时变量自动成为常量
10,为防止处理函数对const限定的值进行修改,所以定义将指向const对象的指针传给普通指针为不合法.
11:类里的const:
(1),在一个类里使用const的意思是"在这个对象寿命期内,这是一个常量",它在每个类对象里分配存储并代表一个值.
(2),对某个常量来讲,每个不同的对象可以含有一个不同的值.初始化工作必须发生在构造函数里.const的初始化必须发生在构造函数的任何代码之前,一般在构造函数初始化表达式表中进行.
(3),因为在类对象里进行存储空间的分配,编译器不知道const成员的内容是什么,所以不能把它用作编译期间的常量.即,如下是不合法的:
class bob {
const size = 100; //illegal
int array[size]; //illegal
};
在类里的const的意思是:“在这个特定对象的寿命期内,而不是整个的类来说,这个值是不变的。“
(3)如何建立一个可以用在常数表达式里的类常量?
使用不带实力的无标记的enum。
枚举的所有制必须在编译时建立,它对类来说是局部的,但常数表达式能得到它的值。使用枚举不会占用对象的存储空间。
例: class bunch {
enum { size = 1000 };
int i[size];
};
(4),const对象和成员函数:
const对象表示"该对象的数据成员在对象寿命期内不改变“。
如果声明一个成员函数为const函数,则等于告诉编译器可以为一个const对象调用该函数。
可以声明为const成元函数的函数必须不改变对象的任何成员,并且不调用任何非const成元函数
(5),按位const与按成员const
const成元函数如何改变类的成员:
(1),按位const:对象中的每个位是固定的,所以对象的每个位的映像从不改变。对应方法:强制转换const: ((y*)this)->j++;
(2),按成员const:虽然整个对象从概念上讲是不变的,但是某个成员可能改变。对应方法:mutable int j;
12,volatile变量:
为满足多任务处理的需要,引入volatile限定词,volatile告诉编译器不要对volatile限定的变量做任何假设;
const volatile + 对象:该对象不能被程序员改变,但可被外界改变。
相关推荐
OpenHarmony v4.1 Release设置应用随系统自动启动
OpenHarmony 4.1 版本中的 Ability Manager Service (AMS) 提供了应用自启动管理功能,允许系统控制哪些应用可以在系统启动时自动运行。这需要以下两个主要步骤:启用系统的自启动管理支持开发一个系统应用来管理自启动配置。
thinking in c++ 读书笔记---const
首先,普通const变量const默认具有内部连接属性,这个可以参考连接里面的一篇文章,说的很详细.如果让const常量可以在多个文件里面使用,必须在定义的时候指定extern.如:extern cosnt int i=0;普通的const变量不会占用内存空间.但是加上extern后就会强制分配内存给这个变量.还有一种情况,在程序中用到这个const变量的地址的时候也会分配空间.
【阿里云大模型高级工程师ACP习题集】2.7 通过微调增强模型能力 (下篇)(⭐️⭐️⭐️ 重点章节!!!)
【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!
pi-mono:一个能统一30多家大模型的AI智能体开发框架,新手也能快速上手
pi-mono 是一个模块化的 AI 智能体开发框架,它把 30+ 主流大模型接口、可观测的智能体循环、终端交互界面(TUI)和编码助手 CLI 整合成一套开箱即用的工具箱。读完这篇文章,你会理解它如何解决"换模型太痛苦、AI 难调试、会话越聊越乱"三大难题,并能在 10 分钟内把它跑起来。 > 一句话理解 pi-mono:别人只给你一堆模型 API,它给你一整套完整的智能体开发流水线。 ##
统计信号处理基础 习题解答1-1
1-1:在雷达习题中,双程延时时间的估计量具有PDF τ0~Nτ0,στ02,其中τ0是真值。假如要估计距离请提出一种估计量R,并求它的PDF。然后,确定标准偏差στ0,使得距离估计值的99%在真值的100m以内,对电磁波传播速度取c=3×108m/s。 解答: 问题1: 由于电磁波传播速度c,信号可观察的双程传播延时τ0和双程传播距离τ0满足关系: R=cτ02 因此可采用如下估计量: R=cτ02 问题2: 由于τ0满足正态分布,且: Eτ0=τ0 varτ0=στ02 那么: E
如何在windows电脑上搭建Linux环境(手把手教安装虚拟机软件和使用云服务器)
手把手教学如何搭建Linux环境
深挖C++:类和对象(中)
(先进后出)
【同等学力】01-逻辑符号表达
F(x): x是确诊者,G(x):x有症状F(x): x是老人,G(x):x是宠物,L(x,y): x喜欢y。
ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL
Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。
ros入门(八)---TF坐标转换
TF(TransForm),就是坐标转换,包括了位置和姿态两个方面的变换。
筹码峰五句口诀,看懂主力的秘密动作!(附实战图示)
筹码图的价值在于,它不像K线那样容易造假。主力可以骗线,但骗不了筹码分布。主力在不在;是吸筹还是出货;接下来是变盘还是震荡。这五句口诀可以说是“筹码阅读的入门圣经”:单峰坚挺变盘在即,双峰对垒高抛低吸;上峰不移主力在跑,多峰林立行情不止;下峰不移不离不弃,筹码识庄稳中取利!📌市场从来不是靠猜,而是靠看清。筹码,就是主力最真实的痕迹。如果你想学会提前布局、跟庄不被甩,学会看筹码峰——这一步必须打牢!
C++移动构造函数详解
移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。
决策变量乘积项的线性化
介绍了决策变量相乘情况下的线性化,并用案例进行线性化演示,其中针对连续变量相乘的情况介绍了McCormick包络的近似线性化方法
跟我学c++中级篇—类型定义的方式
本文系统阐述了编程中类型定义的重要性及c++中的实现方式。重点对比了宏定义、typedef与modern using三种机制,指出using在可读性、灵活性和模板支持上的优势,推荐优先使用。同时提醒开发者注意别名滥用、类型歧义、错误信息冗长等问题,强调统一规范与合理设计。最终结论:在现代c++开发中,应以using为主,兼顾简洁性与可维护性,避免陷入命名混乱与编译困境。
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
【C语言】字符与字符串函数
C语言中字符串为以\0结尾的字符数组,标准库函数基于此约定。本文解析字符串内存布局,详解ctype.h与string.h中字符分类、长度计算、拷贝、比较等函数的使用要点,强调长度判断与越界风险,最后通过命令行待办事项示例整合fgets、sscanf、strncpy、strcmp,展示实际应用中的关键细节。
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
C++ 函数模版
模板参数:● template ,T 就是类型占位符,名字可以自定义,习惯用T● 占位符可以在函数返回值、形参、函数内部当作类型使用使用要点模板代码一般写在头文件:编译器需要看到完整模板源码,才能在每个编译单元完成实例化全局函数、类内成员函数都可以写成模板实例化发生在编译阶段,不是运行时隐式实例化:调用时编译器自动推导实参类型,生成对应版本函数。
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
C++ 运行时多态与虚函数机制全面剖析【面试重点】
构成C++ 运行时多态必须是基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,并且派生类必须对该虚函数完成重写/覆盖(Override)。只有基类的指针或引用才能既指向基类对象,又指向派生类对象(切片机制);而只有完成了虚函数重写,派生类与基类才具备不同的函数行为,达到“指向谁就调用谁”的效果。在类成员函数的前面加上virtual关键字修饰,该成员函数就成为了虚函数。public:// 成员函数前加 virtual 修饰,声明为虚函数。
#SQLite 数据库笔记一:(概念 / 终端指令 / SQL 语句 / C 编程 / 回调函数)
数据库 = 数据的仓库,假设数据是海量。能力说明存储数据持久化保存,程序退出数据还在统计数据、分组、排序数据管理增、删、改、查(CRUD)嵌入式设备上也会用数据库(单片机网关、路由器、工业 HMI 都常见),因为 sqlite 体积小、无需服务进程、单文件即可。数据库 = 库 > 表 > 记录(行) > 字段(列)sqlite3 = 开源、C 写的、单文件、免安装、最多 2T 的嵌入式关系型数据库。
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级 备考:莫队算法离线区间查询详解
备赛进行时:第十八届蓝桥杯软件赛报名已于 2026-10-08 10:00 开启、12-18 14:00 截止,省赛定在 2027-04-10(C/C++·Python 程序设计 9:00–13:00);中国电子学会 2026 年 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名 9/23–12/2 16:00、统考 12-12;全国青少年信息素养大赛 2026—2027 赛季算法应用主题赛也已进入复盘练兵窗口。
【C++ 基础入门】C++继承(下):问题、底层原理与组合
C++继承(菱形继承的问题、虚继承原理、继承与组合、构造顺序)
825 mW 顶上 212 °C:ASM491S 的 105 °C/W、250 mA 短路电流与热关断
25 °C 环境里结温 34.1 °C,125 °C 环境里结温 134.1 °C——后者已经离 150 °C 只有 16 °C 了,但还在范围内。换个角度看同一件事:从 25 °C 和从 125 °C 起算,温升都是 86.6 °C,但一个到 111.6 °C(还在范围内),一个到 211.6 °C(远远超限)。这个算例里 20 °C/W 是我假设的,实际值取决于机壳材料、密封程度、有没有风扇,跨度可以从 5 °C/W 到 50 °C/W 以上。外面 50 °C 的机箱,盒内就是 63.9 °C。
《C++ 项目:手写大模型接入 SDK》Gemini接口设计(上):初始化、全量响应实现和测试
本文系统完成了Gemini模型通过OpenAI兼容API的接入开发,基于Apifox验证接口规范,设计并实现GeminiProvider类,涵盖初始化、状态检测、全量响应等核心功能。重点处理了代理配置强制校验、Bearer鉴权、JSON序列化与响应解析等工程细节,并通过GTest与CMake完成单元测试,验证链路可用性。项目遵循策略模式,保持与DeepSeek、ChatGPT等模型的统一抽象接口,显著提升SDK可扩展性。
【容斥原理计数】题解:P9489 ZHY的表示法_容斥原理_计数问题_前缀和问题转化_算法竞赛C++
给定 $ n $ 个正整数,求区间 $[l,r]$ 中有多少正整数 $ x $ 可表示为 $ \sum \lfloor \frac{y}{x_i} \rfloor $。通过二分确定最大 $ y $,转化为求 $ 1 \sim H $ 中是某些 $ x_i $ 倍数的数的个数,利用容斥原理与 DFS 枚举子集计算,结合 LCM 预判剪枝及去重优化,时间复杂度 $ O(2^n \log V) $,可高效处理 $ r \le 10^9 $ 的数据。
头歌 数据结构——C&C++线性表实训
本系列任务围绕线性表的链式实现,依次完成顺序构建、逆序构建、排序插入、查找、删除、求长度及栈、队列、集合等应用。通过动态内存分配与指针操作,掌握单链表的基本操作与实际应用,涵盖插入、删除、遍历、搜索等核心功能,最终实现数据结构在典型场景中的灵活运用。
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
本题核心思想是:最少移动步数 = 总长度 - 可保留的最长连续子串长度。未移动字母在T中必须为连续子串,在S中需保持相对顺序(即子序列)。通过枚举T的所有连续子串起点,贪心匹配S中的对应字符,求出最长可保留长度L,答案即为n−L。时间复杂度O(n²),空间复杂度O(n),适用于n≤1000。
C++ vector 添加与删除元素的底层原理:erase 返回值与倒序遍历删除
vector是连续内存的动态数组,支持O(1)随机访问,但扩容时需重新分配内存并搬迁元素。push_back和emplace_back均摊时间复杂度为O(1),扩容策略(如2倍或1.5倍)确保总代价均摊;insert与erase在中间位置操作需移动元素,时间复杂度O(n),且使后续迭代器失效。删除指定元素推荐使用erase-remove惯用法或std::erase_if,避免逐个删除导致O(n²)复杂度。从后往前遍历可防止漏删,但最优解仍是高效惯用法。预估容量后调用reserve()可避免频繁扩容,提升性能
1900



被折叠的 条评论
为什么被折叠?



