static 关键字在 C++ 中有多种用途,主要用于定义静态成员变量、静态成员函数、局部静态变量和静态局部函数。以下是 static 关键字在不同场景下的多种用法:
static
静态成员变量属于类,而不是类的每个对象,因此所有对象共享同一个静态成员变量的内存空间。静态成员变量在编译时被分配内存空间,并且必须在类的外部初始化。
class MyClass { public: static int count; // 声明静态成员变量 }; int MyClass::count = 0; // 初始化静态成员变量 // 使用静态成员变量 MyClass obj1; MyClass obj2; obj1.count = 10; std::cout << obj2.count; // 输出 10
静态成员函数属于类,而不是类的每个对象,因此它们不需要通过对象来调用,可以直接通过类名访问。静态成员函数只能访问静态成员变量或其他静态成员函数,不能访问非静态成员。
class MyClass { public: static void printCount() { std::cout << count; // 访问静态成员变量 } private: static int count; }; int MyClass::count = 0; // 初始化静态成员变量 // 调用静态成员函数 MyClass::printCount();
局部静态变量是在函数内部声明的静态变量,它们在第一次进入函数时初始化,并且在程序的整个生命周期内保持其值。局部静态变量在函数调用之间保持其值,但其作用域仅限于声明它的函数。
void func() { static int count = 0; // 声明局部静态变量 count++; std::cout << count << std::endl; } // 调用函数多次 func(); // 输出 1 func(); // 输出 2
静态局部函数只能在声明它的文件中可见,不能在其他文件中使用。它们与普通的局部函数一样,但只能在声明它的文件中调用。
void func1() { std::cout << "Function 1" << std::endl; } static void func2() { std::cout << "Function 2" << std::endl; } // 在其他文件中调用 func1() 可行 // 在其他文件中调用 func2() 不可行
static 关键字在 C++ 中的多种用法使得它成为一个非常灵活和强大的工具,可以在不同的场景中实现各种功能。
原文链接:codingdict.net