c++ static详细使用分析
目录
一.定义
在C++中,是一个关键字,用于声明静态成员、静态局部变量以及静态函数。
二.各种类型分析
1.静态成员变量:
class MyClass {
public:
static int count; // 静态成员变量声明
};
int MyClass::count = 0; // 静态成员变量定义和初始化
int main() {
MyClass obj1;
MyClass obj2;
obj1.count = 2;
cout << obj2.count; // 输出为2,因为count是静态成员变量,被所有类实例共享
return 0;
}
2.静态局部变量:
void myFunction() {
static int count = 0; // 静态局部变量
count++;
cout << count << endl;
}
int main() {
myFunction(); // 输出1
myFunction(); // 输出2
myFunction(); // 输出3
return 0;
}
3.静态函数:
class MyClass {
public:
static void myStaticFunction() {
cout << "This is a static function." << endl;
}
};
int main() {
MyClass::myStaticFunction(); // 直接通过类名调用静态函数
return 0;
}
三.实际开发中static的用法
1.单例模式(Singleton Pattern):
使用静态成员函数和静态成员变量创建单例类,确保只有一个实例存在。
class Singleton {
public:
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
void doSomething() {
// ...
}
private:
Singleton() {} // 私有构造函数,防止外部创建实例
};
int main() {
Singleton& obj = Singleton::getInstance();
obj.doSomething();
return 0;
}
2.计数器变量:
使用静态成员变量实现计数器功能,用于统计类的实例数量。
class Counter {
public:
Counter() {
count++;
}
~Counter() {
count--;
}
static int getCount() {
return count;
}
private:
static int count; // 静态成员变量
};
int Counter::count = 0; // 静态成员变量初始化
int main() {
Counter obj1;
Counter obj2;
cout << Counter::getCount() << endl; // 输出2
return 0;
}
3.辅助函数:
使用静态函数作为辅助函数,不依赖于类的实例,可以直接调用。
class MathUtils {
public:
static int add(int a, int b) {
return a + b;
}
};
int main() {
int sum = MathUtils::add(5, 3); // 调用静态函数
cout << sum << endl; // 输出8
return 0;
}
4.缓存数据:
使用静态局部变量作为缓存,避免重复计算或频繁的资源获取操作。
int getData() {
static int cache = fetchData(); // 静态局部变量作为缓存
return cache;
}
int main() {
int data = getData(); // 第一次调用需要获取数据
data = getData(); // 后续调用直接使用缓存数据
return 0;
}
四.static内存分配
在C++中,静态成员变量和静态局部变量的内存分配时机是不同的。
1.静态成员变量的内存分配:
2.静态局部变量的内存分配:
需要注意的是,静态局部变量和静态成员变量的内存分配和初始化时机是在编译时确定的,与程序的执行流程无关。静态局部变量和静态成员变量的生命周期和作用域与其所在的函数或类相关。
另外,静态局部变量和静态成员变量的作用域是在定义它们的函数或类范围内可见。静态局部变量的作用域是局部的,只在定义它们的函数内可见。而静态成员变量的作用域是类级别的,可以通过类名访问。
总结起来,静态成员变量在程序启动时进行内存分配和初始化,而静态局部变量在其所在函数第一次被调用时进行内存分配和初始化。
到此这篇关于c++ static详细分析的文章就介绍到这了,更多相关c++ static内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播