static关键字的作⽤
static 关键字主要⽤于控制变量和函数的⽣命周期、作⽤域以及访问权限。
1. 静态局部变量
在函数内部使⽤ static 关键字修饰的局部变量是静态局部变量。
静态局部变量的⽣命周期延⻓到整个程序的执⾏过程,但只在声明它的函数内可⻅。
void exampleFunction() {
static int localVar = 0; // 静态局部变量
localVar++;
cout << "LocalVar: " << localVar << endl;
}
- 静态全局变量
静态全局变量是在 文件作用域 中使用 static 关键字声明的变量。
它的作用域仅限于定义它的文件,其他文件无法访问。
// file1.cpp
static int hiddenVar = 42; // 静态全局变量,仅在 file1.cpp 中可见
void printVar() {
std::cout << hiddenVar << std::endl; // 可以访问
}
// file2.cpp
extern int hiddenVar; // 错误!无法访问 file1.cpp 中的 hiddenVar
- 静态全局函数
静态函数是在 文件作用域 中使用 static 关键字声明的函数。
它的作用域仅限于定义它的文件,其他文件无法调用。
// file1.cpp
static void helper() { // 静态函数,仅在 file1.cpp 中可见
std::cout << "This is a helper function." << std::endl;
}
void publicFunc() {
helper(); // 可以调用
}
// file2.cpp
extern void helper(); // 错误!无法访问 file1.cpp 中的 helper 函数
4. 静态成员变量
在类中使⽤ static 关键字修饰的成员变量是静态成员变量。
所有类的对象共享同⼀个静态成员变量的副本。
静态成员变量必须在类外部单独定义,以便为其分配存储空间。
class ExampleClass {
public:
static int staticVar; // 静态成员变量声明
};
// 静态成员变量定义
int ExampleClass::staticVar = 0;
4. 静态成员函数
在类内部使⽤ static 关键字修饰的函数是静态成员函数。
静态成员函数属于类⽽不是类的实例,可以通过类名直接调⽤,⽽⽆需创建对象。
静态成员函数不能直接访问⾮静态成员变量或⾮静态成员函数。
class ExampleClass {
public:
static void staticFunction() {
cout << "Static function" << endl;
}
};
const 关键字的作⽤
const 关键字主要⽤于指定变量、指针、引⽤、成员函数等的性质
1. 常量变量:声明常量,使变量的值不能被修改。
2. 指针和引⽤:声明指向常量的指针,表示指针所指向的值是常量,不能通过指针修改。声明常量引⽤,表示引⽤的值是常量,不能通过引⽤修改。
const int* ptr = &constantValue; // 指向常量的指针
const int& ref = constantValue; // 常量引⽤
3. 成员函数:⽤于声明常量成员函数,表示该函数不会修改对象的成员变量(对于成员变量是⾮静态的情况)。
4. 常量对象:声明对象为常量,使得对象的成员变量不能被修改。
5. 常引⽤参数:声明函数参数为常量引⽤,表示函数不会修改传⼊的参数。
6. 常量指针参数:声明函数参数为指向常量的指针,表示函数不会通过指针修改传⼊的数据。