C、C++中const的区别
C语言中:
被const修饰的变量,仍然是变量。虽然不能用C语法给这个变量改变值,但他本质上还是变量。
C编译器会给它分配空间。
C中,const默认使用的是外部链接。
C++中:
被const修饰的变量,实际上已经是一个真正的常量了。
而且,当在定义该常量的文件内使用时,C++编译器是不给该常量分派内存空间的,常量只会存在于符号表内。但是以下两种情况例外:1、当该常量被extern修饰之后(如果想要在其他文件中使用,也必须用extern修饰),表示告诉编译器,这个常量要使用外部链接,即有其他的编译单元会用寻址的方法来引用它。C++会给该const常量分配空间。2、本文件中若引用了该const变量的地址,编译器也是会被给它分配空间的。
C++中const默认使用内部链接。
总之,C++中,是否为const分配空间要看具体情况.
如果加上关键字extern或者取const变量地址,则编译器就要为const分配存储空间.
C++中定义常量的时候不再采用define,因为define只做简单的宏替换,并不提供类型检查
内链接:编译器只对正在被编译的文件创建存储空间别的文件可以使用相同的表示符号或全局变量,C/C++中内连接使用static 关键字。
外链接:为所有被编译过的文件创建一片单独的存储空间。一旦空间被创建,连接器必须解决对这片存储空间的引用。全局变量和函数使用外部链接。通过extern关键字声明,可以从其他文件访问相应的变量和函数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具