C++中的static和const 1
C++中的static和const
在 C++ 中,const 和 static 是两个重要的关键字,它们可以修饰变量、函数和类成员,影响其存储方式、作用域和链接性。 二者都有不变性,这是让人困扰的地方
简单来说,他们之间的区别用这样一张表格理解
| 特性 | const | static |
|---|---|---|
| 作用 | 定义常量,防止修改 | 控制存储期、作用域和链接性 |
| 变量修改 | 不可修改 | 可以修改(除非同时是 const) |
| 存储位置 | 取决于作用域(栈/全局区) | 全局数据区(整个程序生命周期) |
| 链接性(全局) | 默认内部链接(C++) | 修饰全局变量/函数时是内部链接 |
| 类成员 | const 成员必须初始化 | static 成员必须在类外定义 |
const强调的是数据的不变性,而static强调的是存在的周期 static在编译器一执行的时候就开始分配内存,并且生命周期是整个程序运行期间(从初始化开始到程序结束),执行后持久存在,直到程序结束。 他的不变性是指存储位置固定(在全局数据区),且生命周期与程序相同。
void foo() {
static int count = 0; // 初始化仅发生一次
count++;
std::cout << count; // 每次调用 foo(),count 会递增
}
如果是类里面的话
class MyClass {
public:
static int s_count; // 静态成员变量,属于类而非对象
static void print() { // 静态成员函数,不能访问非静态成员
std::cout << s_count << std::endl;
}
};
int MyClass::s_count = 0; // 必须在类外定义
这里面的s_count就不是属于对象的了而是类本身具有的特性 而静态成员函数不能访问非静态的成员
#include <iostream>
using namespace std;
class MyClass {
public:
int value;
static int s_count; // 静态成员变量,属于类而非对象
static void print() { // 静态成员函数,不能访问非静态成员
std::cout << s_count << std::endl;
}
};
int MyClass::s_count = 0;
int main(){
MyClass::print();
MyClass new_obj;
new_obj.value = 10;
new_obj.s_count = 100;
MyClass::print();
new_obj.print();
return 0;
}
输出结构
0 100 100
可以看到,对象可以访问是同对应的static函数以及变量,同时也可以进行修改,这是类本身具有的特性,一改的话类里面的也会跟着改变
Enjoy Reading This Article?
Here are some more articles you might like to read next:
- Google Gemini updates: Flash 1.5, Gemma 2 and Project Astra
- Displaying External Posts on Your al-folio Blog
- Agent 评测体系与评测集构建——美团《评测漫谈》+《评测白皮书 01》笔记
- 多模态 LLM 用户智能体做推荐系统离线 A/B 测试
- 自我改进 Agent 统一拆解:θ / Σ 双路线
- CS146S 学习笔记(Week 4-8):从智能体管理者到多栈 AI 构建
- CS146S 学习笔记:从 Prompt 技术全景到 AI IDE 设计文档规范
- 二分查找双模板 + searchInsert 逐行拆解:从模板到边界
- Agent Memory 全景:30 个记忆技术的模块化拆解
- LightRAG 深度解析:简单快速的图增强 RAG