在C++中,static
关键字是一个多功能的修饰符,它在不同的上下文中具有不同的含义。本文将详细介绍C++中static
关键字的各种用法。
在函数内部,static
可以用来声明局部变量。当函数内部的变量被声明为static
时,它实际上是在静态存储区域(通常在BSS段)中存储的,而不是在堆栈上。这样的局部变量在程序的生命周期内只初始化一次,并且它的生命周期贯穿整个程序,即使该函数执行结束后也不会被销毁。
cppvoid counter() {
static int count = 0;
count++;
std::cout << count << std::endl;
}
每次调用counter
函数时,都会输出递增的数字,而不是每次都从1开始。
在类中,static
修饰的成员变量表示该变量是属于类本身的,而不是属于类的某个对象的。所有该类的对象共享同一个静态成员变量。它们在内存中只有一个实例,无论创建了多少对象。
cppclass MyClass {
public:
static int count;
MyClass() {
count++;
}
};
int MyClass::count = 0;
每次创建一个MyClass
对象时,count
的值都会增加。
在类中,static
还可以修饰成员函数。静态成员函数不需要类的对象就可以调用。由于它们没有this
指针,所以不能直接访问非静态成员变量和非静态成员函数,但它们可以访问静态成员变量和其他静态成员函数。
cppclass MyClass {
public:
static int count;
static void showCount() {
std::cout << count << std::endl;
}
};
int MyClass::count = 0;
在文件作用域内,static
可以用来限制全局变量或函数的链接范围到当前文件。这意味着,这些变量或函数在其他文件中是不可见的。
cpp// file1.cpp
static int myVariable = 10;
myVariable
只在file1.cpp
中可见。
在C++11及之后的版本中,static
关键字还可以用在类的成员初始化中,表示该成员是一个线程局部的。
cppclass MyClass {
public:
static thread_local int myThreadVariable;
};
这意味着每个线程都有一个myThreadVariable
的副本。
static
在C++中是一个强大而多功能的修饰符。根据上下文的不同,它可以用于控制变量的生命周期、限制链接范围或标记线程局部变量。希望本文能帮助您更好地理解和使用static
关键字。
本文作者:Rowlet
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!