📅  最后修改于: 2023-12-03 15:13:45.485000             🧑  作者: Mango
static
是 C++ 中的一个关键字,它可以应用于函数、类和变量。它的用途和作用在不同的场景下有所不同。
当 static
关键字用于变量时,它表示这个变量是静态的(也称为内部变量)。
静态变量在程序的整个生命周期内都是存在的,即使它在函数或块作用域内定义,也可以在函数或块作用域之外访问它。因此,静态变量可以用来保存函数或类的状态信息,也可以用于实现单件模式(singleton pattern)。
以下是一个示例代码:
#include <iostream>
void countFunctionCall() {
static int count = 0;
count++;
std::cout << "Function has been called " << count << " times." << std::endl;
}
int main() {
countFunctionCall();
countFunctionCall();
countFunctionCall();
return 0;
}
在上面的示例代码中,我们定义了一个静态变量 count
,并在函数 countFunctionCall
中对其进行递增操作。因为 count
是静态的,所以它的值在每次函数调用之间都得以保存。该程序的输出应该是:
Function has been called 1 times.
Function has been called 2 times.
Function has been called 3 times.
当 static
关键字用于函数时,它表示这个函数是静态的。静态函数只能在当前文件内被访问,不能被其他文件使用。
静态函数可以用来隐藏函数的实现细节,或者仅仅是为了方便地组织代码。
以下是一个示例代码:
#include <iostream>
static void printMessage() {
std::cout << "Hello, world!" << std::endl;
}
int main() {
printMessage();
return 0;
}
在上面的示例代码中,我们定义了一个静态函数 printMessage
,它输出一条消息。因为 printMessage
是静态的,所以它只能在当前文件中被访问。该程序应该输出:
Hello, world!
当 static
关键字用于类成员时,它表示这个成员是与类相关的,而不是与类的任何对象相关的。换句话说,它是一个静态变量或函数,而不是一个实例变量或虚函数。
一个静态成员可以被所有的类对象(包括类的内部和外部)共享。静态成员为类提供了一种只占用单个存储空间的方式,因为它不需要每个实例都保存一份。
以下是一个示例代码:
#include <iostream>
class MyClass {
public:
MyClass() {
count++;
}
static int getCount() {
return count;
}
private:
static int count;
};
int MyClass::count = 0;
int main() {
MyClass a;
MyClass b;
MyClass c;
std::cout << "Number of MyClass objects created: " << MyClass::getCount() << std::endl;
return 0;
}
在上面的示例代码中,我们定义了一个静态变量 count
和一个静态函数 getCount
,它们都是类 MyClass
的成员。我们在类构造函数中对 count
进行递增操作,并在 getCount
函数中返回 count
的值。由于 count
是静态的,所有 MyClass
对象都共享同一个 count
变量。该程序应该输出:
Number of MyClass objects created: 3
static
关键字在 C++ 中有多种用途,涉及到变量、函数和类成员。static
的作用和用途因具体场景而异,但总的来说,它用于保存状态信息、隐藏实现细节、方便组织代码等多种场景。因此,程序员应该熟练掌握 static
关键字的各种用法,在实际编程中合理地应用它们。