const强调值不可修改,static关注存储周期与共享性;前者用于定义常量、保护数据,后者实现静态局部变量、类成员共享及作用域控制,二者可结合使用如static const定义类内常量。
在C++中,const 和 static 是两个常用但作用完全不同的关键字修饰符。它们可以用于变量、函数或类成员,但所表达的语义和用途有本质区别。下面从多个角度详细说明它们的区别和使用场景。
const 用来声明一个“常量”,即其值在初始化后不能被修改。它强调的是数据的只读性。
常见用法包括:
const int size = 10;,之后不能对 size 赋值。const int* p:指向常量的指针,值不能改,指针可以改。int* const p:常量指针,指针本身不能改,指向的值可以改。const int* const p:指向常量的常量指针,都不能改。void func(const std::string& str);
int getValue() const;
核心思想是:加了 const 的东西,编译器会阻止你修改它。
”static 的含义依赖于使用上下文,主要涉及生命周期和作用域,而不是可变性。
在全局作用域中(函数外):
在函数内部:
void count() { static int c = 0; c++; }
在类中:
static int count; 需要在类外定义一次:int MyClass::count = 0;
this 指针,可通过类名直接调用。MyClass::getCount();
核心思想是:static 改变的是存储方式、生命周期或共享方式,而不是是否可修改。
两者并不互斥,经常联合使用来定义类内的常量数据成员。
例如:
static const int MAX_SIZE = 100; 在类中声明一个共享且不可变的常量。static constexpr int MAX_SIZE = 100; 实现编译期常量。这种组合既保证了“所有对象共用一份”,又保证了“不能修改”。
基本上就这些。掌握它们的区别,能写出更安全、清晰和高效的C++代码。