c++中的静态(内容包含类外、类内以及局部的静态)

c++中的静态

独立于类的静态

1.静态变量

在 C++ 中,你可以在任何作用域(例如文件作用域或函数作用域)内声明静态变量。这些变量不会与任何特定的类相关联,它们只是在声明它们的作用域内可见。
静态变量是在程序运行期间保持其值的变量,但其作用域受限于声明它的区域。静态变量在函数内部声明时,生命周期与程序的执行周期相同,但作用域仅限于声明它的函数内部。静态变量在函数外部声明时,生命周期也与程序执行周期相同,但作用域为文件作用域。

// 在全局作用域内声明静态变量(文件作用域中可以任意访问,脱离文件作用域访问不到)
static int globalStaticVar = 10;void func() {// 在函数作用域内声明静态变量static int localStaticVar = 20;cout << "Local static var: " << localStaticVar << endl; // 20
}int main() {cout << "Global static var: " << globalStaticVar << endl; // 10func();return 0;
}

在上面的例子中,globalStaticVar 是在全局作用域内声明的静态变量,而 localStaticVar 是在函数作用域内声明的静态变量。

void func() {static int count = 0; // 函数内部静态变量count++;cout << "Count: " << count << endl;
}int main() {func(); // 输出 Count: 1func(); // 输出 Count: 2return 0;
}

2.静态函数

类外部的静态函数与静态变量类似,它们不属于任何特定的类,只是在文件作用域内可见的函数。

// 在文件作用域内声明静态函数
static void staticFunction() {cout << "This is a static function." << endl;
}int main() {staticFunction(); // 调用静态函数return 0;
}

在这个例子中,staticFunction 是在文件作用域内声明的静态函数,可以在文件中的任何位置调用它。但是其他文件是无法访问到这个静态函数,该静态函数只在该文件中作用。

类内的静态

1. 静态类函数

静态函数是指在类内部声明和定义的函数,这些函数不属于任何类对象,因此它们不需要通过对象来调用。静态函数不能直接访问非静态成员变量和成员函数,因为它们没有 this 指针。静态函数只能访问静态成员变量和其他静态函数

class MyClass {
public:static void staticFunction() { // 静态函数cout << "This is a static function." << endl;}
};int main() {MyClass::staticFunction(); // 直接通过类名调用静态函数return 0;
}

2. 静态类成员

静态类成员是指在类内部声明的静态变量或静态函数。它们对于所有类的实例都是共享的,因此无论创建了多少个类的实例,静态成员的内存只分配一次。静态成员在类外部定义和初始化。

class MyClass {
public:static int staticVar; // 静态变量声明static void staticFunction() { // 静态函数cout << "This is a static function." << endl;}
};int MyClass::staticVar = 5; // 静态变量定义和初始化int main() {cout << MyClass::staticVar << endl; // 输出 5MyClass::staticFunction(); // 输出 This is a static function.return 0;
}

局部静态

局部静态变量是指在函数内部声明的静态变量。与普通局部变量不同,局部静态变量在函数第一次调用时初始化,并且在函数调用结束后不会被销毁,而是保持其值直到程序结束。这种特性使得局部静态变量非常适合用于实现单例模式。

单例模式是一种创建型设计模式,旨在确保类只有一个实例,并提供全局访问点。

以下是使用局部静态变量实现单例模式的示例:

#include <iostream>class Singleton {
private:// 私有构造函数,防止外部直接实例化Singleton() {}public:// 获取单例实例的静态方法static Singleton& getInstance() {// 在首次调用时初始化静态局部变量static Singleton instance;return instance;}// 其他方法和成员变量...void doSomething() {std::cout << "Singleton instance is doing something." << std::endl;}
};int main() {// 获取单例实例Singleton& singleton = Singleton::getInstance();// 使用单例实例singleton.doSomething();return 0;
}

在这个例子中,getInstance 方法返回一个 Singleton 类型的引用,但是该方法内部的静态局部变量 instance 在第一次调用时进行初始化,并且在程序的整个生命周期内保持其值。因此,每次调用 getInstance 方法都会返回同一个 Singleton 类的实例,确保了单例模式的实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/822523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MoCo v2 论文解读

paper&#xff1a;Improved Baselines with Momentum Contrastive Learning official implementation&#xff1a;https://github.com/facebookresearch/moco 这篇文章的内容只有2页&#xff0c;不能称之为paper&#xff0c;作者本人也称之为note。主要内容就是将SimCLR中的两…

用 PyTorch Lightning 监控和串流 PyTorch 的训练进度 TensorBoard MNISTDataModule 训练 查看训练进度

tags: AI开发/云原生/Kubernetes开发/Python/Notebook开发/Python/PyTorch开发/Python/PyTorchLightningAI/PyTorchAI/训练AI/TensorflowAI/TensorBoard开发/Python/TensorBoard开发/Python/HuggingFaceAI/TrainerAI/HuggingFaceAI/数据集/MNIST用 PyTorch Lightning 监控和串流…

灯光4-利用光照探头模拟局部实时光影效果

在Unity中&#xff0c;可以使用光照探头来模拟局部实时光影效果。光照探头是一种用于捕捉场景中光照信息的特殊组件。通过将光照探头放置在场景中的某个位置&#xff0c;它会记录下该位置的光照信息&#xff0c;并将其应用于周围的物体上&#xff0c;从而实现局部实时光影效果。…

1.5MHz,1.2A COT 架构同步降压变换器只要0.16元,型号:LN3435

推荐原因 1.5MHZ的开关频率&#xff0c;可以使用小电感&#xff0c;1.2A满足多数应用&#xff0c;价格感人&#xff0c;只要0.16元 产品概述 LN3435是一款电流模COT架构同步降压开关稳压器。 输入范围为 2.7V-6.0V&#xff0c;可提供 1.2A 的连续输出电流。 内部集成了低内阻…

学习Rust的第4天:常见编程概念

基于Steve Klabnik的《The Rust Programming Language》一书。昨天我们做了一个猜谜游戏 &#xff0c;今天我们将探讨常见的编程概念&#xff0c;例如&#xff1a; Variables 变量Constants 常数Shadowing 阴影Data Types 数据类型Functions 功能 Variables 变量 In layman ter…

C语言入门第四天(数组)

一、C语言数组的基本语法 1.数组的定义 数组是 C 语言中的一种数据结构&#xff0c;用于存储一组具有相同数据类型的数据。数组中的每个元素可以通过一个索引&#xff08;下标&#xff09;来访问&#xff0c;索引从 0 开始&#xff0c;最大值为数组长度减 1。 2.定义语法格式 …

【鸿蒙开发】动画

1. 属性动画 animation放在其他属性的后面才有过渡效果 组件的某些通用属性变化时&#xff0c;可以通过属性动画实现渐变过渡效果&#xff0c;提升用户体验。支持的属性包括width、height、backgroundColor、opacity、scale、rotate、translate等。 接口&#xff1a; animati…

4个步骤:如何使用 SwiftSoup 和爬虫代理获取网站视频

摘要/导言 在本文中&#xff0c;我们将探讨如何使用 SwiftSoup 库和爬虫代理技术来获取网站上的视频资源。我们将介绍一种简洁、可靠的方法&#xff0c;以及实现这一目标所需的步骤。 背景/引言 随着互联网的迅速发展&#xff0c;爬虫技术在今天的数字世界中扮演着越来越重要…

Python也可以合并和拆分PDF,批量高效!

PDF是最方便的文档格式&#xff0c;可以在任何设备原样且无损的打开&#xff0c;但因为PDF不可编辑&#xff0c;所以很难去拆分合并。 知乎上也有人问&#xff0c;如何对PDF进行合并和拆分&#xff1f; 看很多回答推荐了各种PDF编辑器或者网站&#xff0c;确实方法比较多。 …

支持向量机模型pytorch

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个支持向量机模型pytorch程序,最后打印5个条件分别的影响力。 示例一 支持向量机&#xff08;SVM&#xff09;是一种…

【原创】springboot+mysql理发会员管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

c++中虚函数、纯虚函数以及虚函数的实现原理

c中虚函数、纯虚函数以及虚函数的实现原理 什么是虚函数和纯虚函数 虚函数&#xff08;Virtual Functions&#xff09;和纯虚函数&#xff08;Pure Virtual Functions&#xff09;是 C 中用于实现多态性的重要概念。 虚函数&#xff08;Virtual Functions&#xff09; 虚函…

算法课程笔记——常用库函数

memset初始化 设置成0是可以每个设置为0 而1时会特别大 -1的补码是11111111 要先排序 unique得到的是地址 地址减去得到下标 结果会放到后面 如果这样非相邻 会出错 要先用sort排序 O&#xff08;n&#xff09;被O&#xff08;nlogn&#xff09;覆盖

服务器数据恢复—xfs文件系统节点、目录项丢失的数据恢复案例

服务器数据恢复环境&#xff1a; EMC某型号存储&#xff0c;该存储内有一组由12块磁盘组建的raid5阵列&#xff0c;划分了两个lun。 服务器故障&#xff1a; 管理员为服务器重装操作系统后&#xff0c;发现服务器的磁盘分区发生改变&#xff0c;原来的sdc3分区丢失。由于该分区…

photoshop基础学习笔记

学习 Photoshop 的基础知识是掌握图像处理和设计的关键。以下是一份基础学习笔记&#xff0c;帮助你开始学习 Photoshop&#xff1a; 1. Photoshop 界面导览 工具栏&#xff08;Tool Bar&#xff09;&#xff1a;包含了各种工具&#xff0c;如选择工具、画笔工具、橡皮擦工具…

Linux命令学习—DHCP 服务器

1.1、DHCP 服务器 ①、DHCP&#xff08;dynamic host configure protocol&#xff09;动态主机配置协议 最大的功能就是向客户端提供 TCP/IP 信息&#xff0c;使用的是 UDP:67 端口 ②、手动设定适合&#xff1a;适用小型网络 ③、手动输入 IP 地址和自动获取比较优缺点 ④…

攻防演练,作为红方的步骤应该是那些

在执行合法的攻防演练中&#xff0c;对目标服务器如 http://XXXXX/ 进行漏洞扫描和评估需要遵循严格的步骤来确保所有活动都是安全、合法且有效的。以下是一些基本步骤和技术指南&#xff0c;以及使用 nmap 进行初始扫描的示例。 1. 获取授权 确保你有明确的书面授权来进行漏…

问,由于java存在性能上,以及部分功能上的缺点,请问如何正确使用C,C++,Go,这三个语言,提升Java Web项目的性能?

拓展阅读&#xff1a;版本任你发&#xff0c;我用java8 我明白Java虽然在许多方面表现出色&#xff0c;但在某些特定场景下可能会遇到性能瓶颈或功能限制。为了提升Java Web项目的性能&#xff0c;可以考虑将C、C和Go这三种语言用于特定的组件或服务。以下是如何正确使用这些语…

葡萄书--深度学习基础

卷积神经网络 卷积神经网络具有的特性&#xff1a; 平移不变性&#xff08;translation invariance&#xff09;&#xff1a;不管检测对象出现在图像中的哪个位置&#xff0c;神经网络的前面几层应该对相同的图像区域具有相似的反应&#xff0c;即为“平移不变性”。图像的平移…

设置Linux命令行tab补全不区分大小写

root权限编辑文件 sudo vim /etc/inputrc加入新配置 [按下i键开始输入] 文件末尾加入新配置 set completion-ignore-case on保存 [按下esc键&#xff0c;再输入:wq确定保存] 重启 reboot