c++中const和static关键字
时间: 2025-02-07 13:45:34 浏览: 62
### C++ 中 `const` 和 `static` 关键字的用法与区别
#### 常量特性 (`const`)
在C++中,`const`用于定义不可变的数据。一旦初始化后,这些数据就不能再被修改。
- **常量变量**
定义一个常量整数如下所示:
```cpp
const int MAX_SIZE = 10;
```
- **常量指针与指针常量**
可以创建指向常量对象的指针以及本身为常量的指针:
```cpp
char *p = "hello"; // p是指向字符数组的可变指针
const char *q = "world"; // q是指向字符数组的只读指针
char* const r = str; // r是一个指向char类型的常量指针
```
- **常量引用**
创建对某个特定值的别名而不允许通过该别名更改原值:
```cpp
void func(const int& ref) {
// 不得修改ref的内容
}
```
- **常量成员函数**
成员函数后面加上`const`表明此方法不会改变类的状态。
- **常量函数参数和返回值**
函数形参列表中的`const`限定符确保传入的对象不被改动;而返回类型前加上的`const`则防止接收方篡改返回的结果[^1]。
#### 存储持续性和作用域 (`static`)
另一方面,`static`主要影响程序元素的作用范围及其生存期:
- **局部静态变量**
当在一个函数体内声明了一个带有`static`修饰符的局部变量时,则意味着这个变量在整个应用程序执行期间都保持有效,并且仅第一次进入该函数体的时候才会被执行初始化操作。
```cpp
void counter() {
static int count = 0;
++count;
std::cout << "Count is now: " << count << '\n';
}
```
- **类的静态成员**
对于类而言,静态成员属于整个类而不是单个实例化出来的对象。因此所有的对象共享同一个静态成员副本。
```cpp
class MyClass {
public:
static int sharedValue;
};
int MyClass::sharedValue = 42; // 初始化外部链接的静态成员变量
```
- **全局/命名空间级别的静态变量**
如果希望某些变量仅仅局限于当前源文件内可见的话就可以采用这种方式来实现隐藏效果。
```cpp
namespace Ns {
static int hiddenVar = 98765;
}
```
综上所述,虽然两者都可以用来限制访问权限,但是它们各自有着不同的侧重点——`const`强调的是保护数据免受意外变更的影响,而`static`更侧重于调整实体的存在形式(比如延长生命周斯或是缩小可视区域)。
阅读全文
相关推荐



















