C++中的static变量具有以下作用域:
- 如果static变量定义在函数内部,那么它的作用域仅限于该函数。这意味着在其他函数中无法访问此静态变量。每次调用该函数时,静态变量都会保留其上一次调用结束时的值。
void func() { static int count = 0; count++; cout << "This function has been called " << count << " times." << endl; }
- 如果static变量定义在全局作用域中,那么它的作用域是整个程序。这意味着在整个程序中都可以访问此静态变量。静态全局变量在程序启动时初始化,并在程序结束时销毁。
int global_count = 0; void func() { static int count = 0; count++; cout << "This function has been called " << count << " times." << endl; }
- 如果static变量定义在类中,那么它的作用域仅限于该类的成员函数。这意味着只有该类的成员函数可以访问此静态变量。静态成员变量在类首次被实例化时初始化,并在程序结束时销毁。
class MyClass { public: static int count; }; int MyClass::count = 0; void func() { MyClass obj; MyClass::count++; cout << "MyClass has been instantiated " << MyClass::count << " times." << endl; }
总之,C++中的static变量作用域取决于它的定义位置。在函数内部定义的静态变量仅在该函数中可见,而在全局作用域或类中定义的静态变量在整个程序中可见。