这里写目录标题

  • static 关键字
      • 静态局部变量 vs 局部变量
      • 静态全局变量 vs 全局变量
      • 静态成员变量 vs 成员变量
      • 静态成员函数
  • 单例模式

static 关键字

在此之前, 先了解一下 static 关键字

静态局部变量 vs 局部变量

在静态局部变量中,变量不会在函数调用结束后销毁,值会保留
变量在函数调用结束后依然存在。

所以每个函数访问的都是同一个 count 。但如果该函数是int count = 0; counter()将都是“函数已被调用1次”

#include <iostream>
using namespace std;void counter() {// 静态局部变量 - 在函数调用之间保持值static int count = 0;count++; // 每次调用增加计数cout << "函数已被调用 " << count << " 次" << endl;
}int main() {counter(); // 输出: 函数已被调用 1 次counter(); // 输出: 函数已被调用 2 次counter(); // 输出: 函数已被调用 3 次return 0;
}

.
.
.

静态全局变量 vs 全局变量

静态全局变量 - 只能在当前文件访问
而全局变量 是任何文件都可以访问的

#include <iostream>
using namespace std;// 静态全局变量 - 只能在当前文件访问
static int counter = 0;void increment() {counter++;cout << "计数器值: " << counter << endl;
}int main() {increment(); // 输出: 计数器值: 1increment(); // 输出: 计数器值: 2increment(); // 输出: 计数器值: 3return 0;
}

.
.
.
.

静态成员变量 vs 成员变量

基本上等同与静态局部变量 与 局部变量:)

#include <iostream>
using namespace std;class Counter {
public:// 静态成员变量声明static int count;Counter() {count++; // 每次创建对象时增加计数}
};// 静态成员变量定义和初始化(必须在类外)
int Counter::count = 0;int main() {cout << "初始计数: " << Counter::count << endl; // 0Counter obj1;cout << "创建obj1后: " << Counter::count << endl; // 1Counter obj2;cout << "创建obj2后: " << Counter::count << endl; // 2}

.
.
.
.

静态成员函数

就是专门用来操作静态成员变量的,函数的返回值就是静态局部变量
静态局部变量的作用你懂吧?
只用打出一个商标,后面的都是用同一个商标,这就是单例模式最重要的一点

static Singleton* getInstance(){ return &instance;}

.
.
.
.

单例模式

这里只讨论线程安全下的懒汉模式

class Singleton
{
public:static Singleton* getInstance()    // 静态成员方法  #2{static Singleton instance;					// 静态局部变量    #3return &instance; 									//返回一个静态局部变量的地址   #4}private:Singleton() { cout << "Singleton()" << endl; }	  //私有的构造函数  #1~Singleton() { cout << "~Singleton()" << endl; }Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;
};int main()
{Singleton* p1 = Singleton::getInstance(); Singleton* p2 = Singleton::getInstance(); Singleton* p3 = Singleton::getInstance();cout << p1 << endl;cout << p2 << endl;cout << p3 << endl;return 0;
}

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

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

相关文章

KEDA/HPA/VPA 三件套:ABP 后台作业的事件驱动伸缩

&#x1f680; KEDA/HPA/VPA 三件套&#xff1a;ABP 后台作业的事件驱动伸缩 &#x1f4da; 目录&#x1f680; KEDA/HPA/VPA 三件套&#xff1a;ABP 后台作业的事件驱动伸缩0. TL;DR ✨1. 背景与目标 &#x1f3af;2. 架构与协作机制 &#x1f9e9;2.1 系统总览&#xff08;组…

webRTc 为何深受直播实现的青睐?

WebRTC(Web Real-Time Communication)之所以在直播场景中备受青睐,核心原因在于它天然契合了现代直播对低延迟、实时互动、跨平台兼容性的核心需求,同时大幅降低了实时音视频开发的门槛。具体来说,其优势体现在以下几个方面: 1. 超低延迟,满足实时互动需求 传统直播协…

HarmonyOS迷宫游戏鸿蒙应用开发实战:从零构建随机迷宫游戏(初版)

在鸿蒙应用开发中&#xff0c;游戏类应用能很好地锻炼 UI 布局、状态管理与逻辑交互能力。本文将以一个随机迷宫游戏为例&#xff0c;详细拆解从首页设计到迷宫生成、角色控制、通关判定的完整开发流程&#xff0c;带你掌握 ArkUI 框架的核心应用技巧。一、项目整体架构本次开发…

石头科技出海升级:全球电商业财一体化与OMS实践

石头科技作为智能清洁设备领域的独角兽&#xff0c;2023 年海外收入占比超过 60%&#xff0c;产品销往全球 60 多个国家。然而&#xff0c;智能硬件出海的复杂性&#xff0c;让企业在业财管理上面临前所未有的挑战。智能硬件业财痛点 产品生命周期管理&#xff1a;研发、生产到…

《URP管线中后处理效果的创新应用与优化实践》

硬件性能的飞速提升与玩家对画面品质的高要求形成了相互推动的态势,而渲染效果作为游戏视觉体验的核心载体,直接决定了玩家对游戏的第一印象与沉浸感。后处理效果作为URP管线的“点睛之笔”,通过在渲染流程末尾对最终图像进行二次加工,能够模拟真实世界的光学现象(如光线散…

【Java 底层】JVM 垃圾回收机制深度剖析:从对象生死判定到收集器实战

【Java 底层】JVM 垃圾回收机制深度剖析&#xff1a;从对象生死判定到收集器实战 【Java 底层】JVM 垃圾回收机制深度剖析&#xff1a;从对象生死判定到收集器实战 Java 之所以被称为 “开发效率利器”&#xff0c;很大程度上得益于其自动内存管理机制 —— 开发者无需手动分配…

网络问题排查

网络连通性测试&#xff1a;ping ip持续性监测&#xff1a;ping -t ipnetstat 可以查看网络连接状态&#xff0c;可以看到显示系统的网络连接&#xff0c;路由表&#xff0c;接口等信息。netstat -nult 回车-t:显示的是tcp的连接-u:显示udp的连接-l:只显示监听状态的端口-n:显示…

tuple/dict/list 这三个数据类型在取值时候的区别

tuple&#xff08;元组&#xff09;、dict&#xff08;字典&#xff09;、list&#xff08;列表&#xff09;在取值时的区别。 1. list&#xff08;列表&#xff09; &#x1f449; 列表就是“一串有顺序的东西”&#xff0c;像排队的人。 取值方式&#xff1a;用 下标&#xf…

深度解析大模型服务性能评测:AI Ping平台助力开发者精准选型MaaS服务

深度解析大模型服务性能评测&#xff1a;AI Ping平台助力开发者精准选型MaaS服务 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般绚烂的技术栈中&#xff0c;我是那个永不停歇的色彩收集者。 &#x1f98b; 每一个优化都是我培育的花朵&#xff…

OpenCV物体跟踪:从理论到实战的全面解析

​ 一、引言​ 在计算机视觉的广阔领域中&#xff0c;物体跟踪技术宛如一颗璀璨的明星&#xff0c;散发着独特的魅力与价值&#xff0c;发挥着举足轻重的作用。它致力于在连续的图像帧或视频序列里&#xff0c;精准识别并持续定位特定的目标物体&#xff0c;这一过程看似简单…

【Python】OS模块操作目录

1、概述os模块是一个Python内置的操作目录和查看系统基础信息的模块&#xff0c;可用于让我们对目录进行批量操作&#xff0c;其中包括&#xff1a;查看系统信息&#xff08;环境变量、分隔符、换行符等&#xff09;&#xff0c;对目录进行创建、删除、重命名、查看目录内容等&…

JavaScript中 i++ 与 ++i

在 JavaScript 编程中&#xff0c;i&#xff08;前置自增&#xff09;和i&#xff08;后置自增&#xff09;是两个常用但极易混淆的运算符。它们看似都能实现变量自增 1 的功能&#xff0c;但其执行时机和返回值的差异&#xff0c;常常导致开发者在实际编码中出现逻辑错误。本文…

fastapi 中间件的使用

1. 中间件基础结构from starlette.middleware.base import BaseHTTPMiddlewareclass RequestLoggerMiddleware(BaseHTTPMiddleware):async def dispatch(self, request: Request, call_next):# 1. 请求处理前逻辑# 2. 调用后续处理response await call_next(request)# 3. 响应…

网络白菜包子手动安装 Arch Linux

大家好&#xff01;我是大聪明-PLUS&#xff01;针对初学者的 Arch Linux 安装详细教程。我曾经花了不少时间才搞清楚安装过程。本文旨在提供一种“捷径”&#xff0c;让每个人都能轻松上手&#xff0c;无论他们是否有 Linux 使用经验。Arch 的主要特点是极其灵活的系统配置&am…

Linux学习笔记(五)--Linux基础开发工具使用

在Linux中软件包通常是指一个包含了软件程序、元数据、依赖关系信息和安装脚本的压缩文件​​。因为在Linux上如果没有软件包管理器,那么想要下载软件会非常麻烦,不仅需要自己去手动编译和安装,而且难以卸载和管理,所以软件包的出现解决了这些问题.软件包一般是由程序文件(编译…

数据结构(陈越,何钦铭) 第十讲 排序(下)

10.1 快速排序 10.1.1 算法概述10.1.2 选主元10.1.3 子集划分10.1.4 算法实现10.2 表排序 10.2.1 算法概述10.2.2 物理排序10.3 基数排序 10.3.1 桶排序10.3.2 基数排序10.3.3 多关键字的排序10.4 排序算法的比较

vue 使用print.js 打印文本,HTML元素,图片,PDF

vue 使用print.js 打印文本,HTML元素,图片,PDF 安装 npm install print-js --save示例 <template><div class"print-example"><h2>Print.js 打印示例</h2><!-- 打印区域 --><div id"printableArea" class"printable…

jenkins审批机器人功能概述-Telegram版

Jenkins审批机器人 - 功能概述 代码链接&#xff0c;私聊可得 项目简介 Jenkins审批机器人是一个集成Jenkins CI/CD流程的自动化审批系统&#xff0c;通过Telegram机器人提供便捷的发布审批功能。该系统支持多环境部署审批、用户权限管理、构建结果通知等完整的DevOps审批流程。…

Rust : 关于解引用“*”

关于解引用*操作符&#xff0c;谨供参考&#xff01; 一、主要代码 use std::ops::Deref; fn main() {model_1();model_2();model_3();model_4();model_5();model_6();model_7();model_8();model_9(); }二、*操作符与常见的引用和解引用 fn model_1(){let reference:&St…

【高级终端Termux】在安卓手机/平板上使用Termux 搭建 Debian 环境并运行 PC 级 Linux 应用教程(含安装WPS,VS Code)

Termux 搭建 Debian 环境并运行 PC 级 Linux 应用教程 一、前言 1. 背景 众所周知&#xff0c;最新搭载澎湃OS和鸿蒙OS的平板都内置了PC级WPS&#xff0c;办公效率直接拉满&#xff08;板子终于从“泡面盖”升级为“生产力”了&#xff09;。但问题来了&#xff1a;如果不是这…