当前位置: 首页 > news >正文

c++之static和const

一 static

static 作⽤:控制变量的存储⽅式和可⻅性,且其值可以被修改

1.1 作用1

作⽤⼀:修饰局部变量:⼀般情况下,对于局部变量在程序中是存放在栈区的,并且局部的⽣
命周期在包含语句块执⾏结束时便结束了。但是如果⽤ static 关键字修饰的话,该变量便会存
放在静态数据区,其⽣命周期会⼀直延续到整个程序执⾏结束。但是要注意的是,虽然⽤
static 对局部变量进⾏修饰之后,其⽣命周期以及存储空间发⽣了变化,但其作⽤域并没有改
变,作⽤域还是限制在其语句块

【解释】

1. 需要在函数多次调用间保留状态

普通局部变量每次进入函数都会重新初始化,离开函数就销毁;而 static 局部变量只会在第一次进入函数时初始化一次,后续调用会保留上一次的值。这让函数可以 “记住” 之前的状态。

例如,实现一个计数器,每次调用函数就加 1:

#include <stdio.h>void count() {static int num = 0;  // 仅第一次调用时初始化,后续调用不执行num++;printf("第 %d 次调用\n", num);
}int main() {count();  // 第 1 次调用count();  // 第 2 次调用count();  // 第 3 次调用return 0;
}

如果 num 是普通局部变量,每次调用都会重置为 0,无法实现计数功能;而 static 修饰后,它能在多次调用间保留状态。

2. 避免全局变量的 “污染”

如果为了保留状态而使用全局变量,会导致变量在整个程序中可见(作用域过大),可能被其他代码意外修改,造成 “全局变量污染”。

而 static 局部变量的作用域仍局限于函数内部,仅在该函数内可访问,既实现了状态保留,又保证了封装性(其他函数无法直接修改它),比全局变量更安全。

1.2 作用2

作⽤⼆:修饰全部变量:对于⼀个全局变量,它既可以在本⽂件中被访问到,也可以在同⼀个
⼯程中其它源⽂件被访问(添加 extern进⾏声明即可)。⽤ static 对全局变量进⾏修饰改变了其
作⽤域范围,由原来的整个⼯程可⻅变成了本⽂件可⻅。

1.3 作用3

作⽤三:修饰函数:⽤ static 修饰函数,情况和修饰全局变量类似,也是改变了函数的作⽤
域。

1.4 作用4

作⽤四:修饰类:如果 C++ 中对类中的某个函数⽤ static 修饰,则表示该函数属于⼀个类⽽
不是属于此类的任何特定对象;如果对类中的某个变量进⾏ static 修饰,则表示该变量以及所
有的对象所有,存储空间中只存在⼀个副本,可以通过;类和对象去调⽤。
(补充:静态⾮常量数据成员,其只能在类外定义和初始化,在类内仅是声明⽽已。)

1.5 作用5

作⽤五:类成员/类函数声明 static

二 const

含义及实现机制

2.1 作用1

const 修饰基本类型数据类型:基本数据类型,修饰符 const 可以⽤在类型说明符前,也可以
⽤在类型说明符后,其结果是⼀样的。在使⽤这些常量的时候,只要不改变这些常量的值即
可。

2.2 作用2

const 修饰指针变量和引⽤变量:如果 const 位于⼩星星的左侧,则 const 就是⽤来修饰指针
所指向的变量,即指针指向为常量;如果 const 位于⼩星星的右侧,则 const 就是修饰指针
本身,即指针本身是常量。

http://www.dtcms.com/a/338119.html

相关文章:

  • Python实战--基于Django的企业资源管理系统
  • 基于KubeSphere的Kubernetes生产实践之路-起步篇
  • K8s部署java程序
  • 数据清洗(Data Cleansing)新手教学简单易懂(缺失值、异常值、重复数据、不一致数据、格式问题),附实战案例
  • php8.+ 新函数总结
  • 了解Arthas-7788
  • GO学习记录六——集成Swagger接口测试页面
  • Three.js 坐标系系统与单位理解教程
  • 安装pnpm i -D @types/wechat-miniprogram报错,版本不匹配
  • 使用 Zed + Qwen Code 搭建轻量化 AI 编程 IDE
  • 【CF】Day129——杂题 (状压DP + 图论 | 贪心 + 数论 + 构造 | 构造 + 贪心 | 构造 + 模拟)
  • Python装饰器:从入门到精通
  • 【STM32】SPI 与 Flash 笔记
  • 【深度长文】Anthropic发布Prompt Engineering全新指南
  • 启发式合并
  • 1、代码相关优化建议
  • 数据分析进阶——解读文本分析模型【附全文阅读】
  • 第十六届蓝桥杯青少组C++省赛[2025.8.10]第二部分编程题(5、环形取硬币游戏)
  • 虚幻基础:动作时间窗
  • Kafka文件存储机制
  • 录音转文字,如何做到“快、准、狠“多格式通吃?
  • 自学中医笔记(二)
  • 大模型对齐算法(四): DAPO,VAPO,GMPO,GSPO, CISPO,GFPO
  • 如何平衡电竞酒店和高校宿舍对AI云电竞游戏盒子的不同需求?
  • 【Python】Python 多进程与多线程:从原理到实践
  • NVIDIA CWE 2025 上海直击:从 GPU 集群到 NeMo 2.0,企业 AI 智能化的加速引擎
  • 软件定义汽车---创新与差异化之路
  • C/C++ 中 str、str、*str 在指针语境下的具体含义(以 char* str 为例):
  • 深化中东战略承诺,联想集团宣布在利雅得设区域总部
  • wait / notify、单例模式