static关键字在C++中兼具作用域限制与生命周期延长功能,被修饰的变量存放于全局静态数据区。静态局部变量生命周期贯穿程序全程,仅初始化一次,作用域限于函数内,实现私有全局效果。
static关键字是C++中一把双刃剑,既能兼容面向过程的C语言风格,也能服务于面向对象的C++风格。其核心功能分为两大类:限制作用域,以及延长生命周期或实现全局共享。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
底层存在一个共性:所有被static修饰的变量或数据成员,均存放在全局静态数据区,既不属于栈也不属于堆。程序启动时分配内存,程序结束时才释放,全程不回收。
普通局部变量存储在栈上,函数调用结束后立即销毁,每次调用都必须重新初始化。而static局部变量则不同:
void test()
{
static int num = 0; // 只初始化1次
num++;
cout << num << " ";
}
int main()
{
test(); // 1
test(); // 2
test(); // 3
return 0;
}
普通全局变量在整个项目所有文件中都能通过extern访问,但加上static之后,只能在自己的.cpp文件内部使用,其他文件无法通过extern引用,从而避免命名冲突。
普通函数在多文件中可以通过extern声明后跨文件调用,但static函数的作用域被锁定在当前文件,外部文件无法调用——适合用于隐藏内部工具函数。
1. 存储位置:位于全局静态区,不属于任何对象,整个类的所有对象共享同一份数据。
2. 访问权限:同样遵循public/private/protected访问控制规则。
3. 初始化规则:
类名::静态变量(无需创建对象),也可使用对象.静态变量。class Person
{
public:
static int count; // 声明
};
// 类外初始化
int Person::count = 0;
int main()
{
Person p1,p2;
Person::count++;
cout << Person::count;
return 0;
}
1. 归属:属于类本身,不属于任意对象,没有this指针。
2. 调用方式:主流写法为类名::静态函数(),也可用对象.静态函数()。
3. 访问限制(重点):
4. 实现写法:类内声明加static,类外实现时不再加static关键字。
class Person
{
public:
static int count;
static void showCount()
{
cout << count; // 合法:访问静态成员
// cout << age; 非法:无法访问非静态成员age
}
private:
int age;
};
int Person::count = 0;
1. 核心需求:一个类在整个程序中只能创建唯一一个对象。
2. 实现步骤(全部依赖static):
#includeusing namespace std; class Singleton { private: // 1.私有构造,禁止外部实例化 Singleton(){} // 2.静态成员保存唯一对象 static Singleton* instance; public: // 3.静态公有方法,获取唯一实例 static Singleton* getInstance() { if(instance == nullptr) instance = new Singleton; return instance; } void test() { cout << "单例对象功能" << endl; } }; // 静态成员类外初始化 Singleton* Singleton::instance = nullptr; int main() { Singleton* p1 = Singleton::getInstance(); Singleton* p2 = Singleton::getInstance(); cout << (p1 == p2) << endl; // 输出1,是同一个对象 p1->test(); return 0; }
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述