在C++中,static关键字有几种不同的用途,它可以用来控制变量的存储期限、函数的链接属性以及类成员的可见性和生命周期。以下是static关键字的几种主要用法:
1. 静态局部变量
当static用于局部变量时,它改变了局部变量的存储期限。通常局部变量仅在函数调用期间存在,但静态局部变量在程序执行开始时就分配空间,并且直到程序执行结束才释放。这意味着即使函数返回,静态局部变量的值也会被保留。
void func() {
static int count = 0; // 分配在程序生命周期内持续的空间
count++;
std::cout << count << std::endl;
}
// 每次调用func,count的值都会增加,因为它在函数调用之间保持状态。
2. 静态全局变量
全局变量前的static关键字限制了该变量的链接属性,使其只在声明它的文件内可见,这被称为内部链接。没有static的全局变量具有外部链接,可以在其他文件中使用extern关键字来引用。
// file1.cpp
static int globalVar = 42; // 内部链接,仅在此文件中可见
// file2.cpp
// extern int globalVar; // 错误,无法访问file1.cpp中的static变量
3. 静态成员变量
在类中,static关键字可以用来声明静态成员变量。静态成员变量属于类本身,而不是类的任何一个对象。因此,所有的对象共享同一个静态成员变量,并且可以在不创建类的实例的情况下访问它。
class MyClass {
public:
static int staticVar; // 声明静态成员变量
};
int MyClass::staticVar = 10; // 定义并初始化静态成员变量
// 访问静态成员变量
std::cout << MyClass::staticVar << std::endl;
4. 静态成员函数
静态成员函数与静态成员变量类似,它们属于类本身而不是类的实例。静态成员函数只能访问静态成员变量和其他静态成员函数,因为它们没有this指针。
class MyClass {
public:
static void staticFunc() {
std::cout << "Static function called." << std::endl;
}
};
// 调用静态成员函数
MyClass::staticFunc();
注意事项:
- 静态局部变量只初始化一次,在程序开始时或者第一次进入函数时。
- 静态全局变量和静态局部变量如果没有显式初始化,会被自动初始化为0。
- 静态成员变量必须在类定义之外定义和初始化。
- 静态成员函数不能访问非静态成员变量或函数,因为它们没有
this指针。
正确使用static关键字可以在C++程序设计中带来很多便利,如节省资源、隐藏实现细节等,但同时也需要注意它所带来的作用域和链接属性的变化。
说白了
- static时c++的关键字,在众多编程语言都有运用
- static表示静态(将内容存入静态内存区域),可以修饰变量和函数
- 用static修饰变量,比如说函数内部的局部变量,可以延长其生命周期(原来的函数内局部变量:函数运行结束后销毁;而函数内用static修饰的变量,延长到程序运行结束后销毁)
7008

被折叠的 条评论
为什么被折叠?



