📅  最后修改于: 2023-12-03 14:39:38.936000             🧑  作者: Mango
在 C++ 中,static
是一个非常重要的关键字,它可以被用于不同的场景来改变变量和函数的行为。在本文中,我们将介绍 static
关键字的用法以及一些常见问题和解决方案。
在函数中定义的变量被称为自动变量,它们存储在栈中,并在函数执行结束时被销毁。如果你想在整个程序生命周期内维护变量的值,可以使用 static 变量。静态变量只会被初始化一次,即使函数被多次调用,也不会重新初始化。
void foo() {
static int x = 0;
x++;
cout << x << endl;
}
int main() {
foo(); // 输出 1
foo(); // 输出 2
foo(); // 输出 3
return 0;
}
这个例子演示了静态变量的行为。当函数 foo()
首次被调用时,x
被初始化为 0,并且会被存储在静态存储区,该变量的地址被记录下来。每次函数被调用时,x
的值都会自增,并显示在屏幕上。
静态函数不是动态绑定的,并且在调用时不能用多态。静态函数只是在一个固定的声明范围内可见,它不能被其他文件中的函数调用,除非这个函数本身是全局变量。
class MyClass {
public:
static void foo() {
cout << "Hello World." << endl;
}
};
int main() {
MyClass::foo(); // 输出 Hello World.
return 0;
}
在这个例子中,静态函数 foo()
是在类中声明的,可以直接在主函数中通过类名调用它。
静态成员变量和静态成员函数都可以用类名作为前缀来访问,而不需要先创建对象。这些变量或函数是在同一类的所有对象之间共享的。
class MyClass {
public:
static int x;
};
int MyClass::x = 0;
int main() {
MyClass a, b;
a.x = 1;
b.x = 2;
cout << a.x << endl; // 输出 2
cout << MyClass::x << endl; // 输出 2
return 0;
}
在这个例子中,静态变量 x
可以被多个对象共享,并且可以通过对象或类名来访问。因为两个对象 a
和 b
共享相同的静态变量 x
,所以将变量 a.x
设置为 1 之后,b.x
的值也变成了 1。
static
关键字是 C++ 中非常有用的功能。它提供了一种在程序生命周期内维护变量值的方法,并且使得类的成员和函数可以在不实例化对象的情况下使用。同时,必须正确地使用静态变量、静态函数和静态类成员,以避免一些常见的问题。