【C++】static作用总结

文章目录

      • 1. 在函数内(局部静态变量)
      • 2. 在类中的静态成员变量
      • 3. 在类中的静态成员函数
      • 4. 在文件/模块中的静态变量或函数
      • 总结

1. 在函数内(局部静态变量)

static 用于函数内的局部变量时,该变量的生命周期变为整个程序的运行期间,而不是在每次进入和退出函数时创建和销毁。它的初始化仅在第一次调用函数时发生。

void func() {static int count = 0;  // 变量只初始化一次count++;std::cout << "Count: " << count << std::endl;
}

特点:

  • 变量在函数结束后不会被销毁,依然保持其值。
  • 只在函数第一次调用时初始化。
  • 作用域依然是函数内部,外部无法访问。

2. 在类中的静态成员变量

类的静态成员变量在整个类中是共享的,而不是每个对象都拥有一份。它属于类,而不是类的实例。

class MyClass {
public:static int count;  // 静态成员变量声明
};int MyClass::count = 0;  // 静态成员变量定义

特点:

  • 所有对象共享同一个静态成员变量。
  • 可以通过类名直接访问 MyClass::count,无需创建对象。
  • 生命周期贯穿程序整个执行期。

3. 在类中的静态成员函数

类的静态成员函数不能访问非静态的成员变量或成员函数,因为它们不属于任何对象。它们同样可以通过类名直接调用。

class MyClass {
public:static void print() {std::cout << "Static member function" << std::endl;}
};

特点:

  • 不依赖于具体对象,可以直接通过类名调用。
  • 不能访问类的非静态成员(除非通过对象或指针访问)。

4. 在文件/模块中的静态变量或函数

static 用于全局变量或函数时,它将限制该变量或函数的作用域仅在定义它的文件中。也就是说,其他文件不能直接访问它们。

static int counter = 0;  // 仅在该文件内可见

特点:

  • 用于控制文件级别的可见性,避免名称冲突。
  • 文件内的其他函数可以访问它,但外部文件无法访问。

总结

  • 局部静态变量:跨函数调用保持值,生命周期为整个程序运行期。
  • 类静态成员:类级别的共享成员,可以不通过实例访问。
  • 文件静态变量/函数:限制变量和函数的作用域到定义它的文件中,避免外部访问。

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

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

相关文章

网络层 V(IPv6)【★★★★★★】

一、IPv6 的特点 IP 是互联网的核心协议。现在使用的 IP&#xff08;即 IPv4 ) 是在 20 世纪 70 年代末期设计的。互联网经过几十年的飞速发展&#xff0c;到 2011 年 2 月&#xff0c;IPv4 的地址已经耗尽&#xff0c; ISP 已经不能再申请到新的 IP 地址块了。我国在 2014 年…

梨花声音教育退费普通话学习技巧之了解文化背景

在学习普通话的过程中&#xff0c;了解中国的文化背景是不可或缺的一环。语言不仅是交流的工具&#xff0c;更是文化的载体。通过深入了解中国的历史、文化和社会背景&#xff0c;学习者可以更好地理解和掌握普通话&#xff0c;使语言学习变得更加生动有趣。本文将从几个方面详…

JWT详解:一种轻量级的身份验证和授权机制

引言 JSON Web Token&#xff08;JWT&#xff09;是一种基于JSON格式的开放标准&#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于在各方之间安全地传输信息。JWT因其轻量级、可扩展性和安全性&#xff0c;在Web应用程序和RESTful…

【iOS】属性关键字

目录 深浅拷贝 自定义类 容器类深拷贝 属性关键字 原子操作 atomic nonatomic 读写权限 readwrite readonly 内存管理 weak assign strong retian copy strong与copy 补充 属性关键字格式 ARC下property的默认属性 深浅拷贝 关于深浅拷贝&#xff0c;笔者在…

ClickHouse的安装教程

ClickHouse的安装教程 文章目录 ClickHouse的安装教程写在前面准备工作关闭防火墙CentOS 取消打开文件数限制安装依赖CentOS 取消 SELINUX 单机安装在 **node01** 的/opt/software 下创建 clickhouse 目录将下载的文件上传到 node01 的 /opt/software/clickhouse 目录下将安装文…

FPGA第 9 篇,Verilog 中的关键字和基数

前言 在 Verilog 中&#xff0c;关键字&#xff08;Keywords&#xff09;和基数&#xff08;Radix&#xff09;是语言的重要组成部分&#xff0c;它们有助于描述和定义硬件设计。上期分享了 Verilog 的基本使用&#xff0c;以及数据类型、逻辑值和算数运算符的简单应用&#x…

快手电商上线 “金秋赶蟹季” 活动,特别推出“蟹无忧”服务

金秋九月&#xff0c;正是品蟹好时节。为引入更多源头好蟹&#xff0c;快手电商发起了「金秋赶蟹季」溯源活动。为了让全国老铁提前品尝肥美的盘锦河蟹&#xff0c;9月3日&#xff0c;快手电商携手盘山县人民政府举行盘锦河蟹开捕仪式&#xff0c;并在快手小店 直播间进行全程直…

《酒饮真经》第二部——劝酒十五式

在欢聚一堂的盛宴中&#xff0c;劝酒不仅是一门学问&#xff0c;更是一种情感的交流。以下是酱酒亮哥总结的几种新颖的劝酒策略&#xff0c;希望您在酒桌创造的氛围更加和谐&#xff0c;让大家感受到你的尊重与重视。 群英荟萃&#xff0c;共饮不拒 面对一群挚友&#xff0c;小…

timm从本地加载预训练模型

想要从timm加载本地预训练模型&#xff0c;首先是参考timm.create_model()从本地加载pretrained模型 将 model timm.create_model(modelxxx, pretrainedTrue, xxx)改为 pretrained_cfg timm.models.create_model("modelxxx").default_cfg pretrained_cfg[file] …

SprinBoot+Vue校园活动报名微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…

Python 语法糖:让编程更简单

Python 语法糖&#xff1a;让编程更简单 Python 是一种功能强大且灵活的编程语言&#xff0c;它提供了许多语法糖&#xff08;syntactic sugar&#xff09;&#xff0c;使得编程变得更加简单、快捷和高效。这些语法糖可以帮助开发者更好地表达自己的想法&#xff0c;提高代码的…

SpringBoot 集成 kafka,并消费历史事件

SpringBoot 集成 kafka&#xff0c;并消费历史事件 消费历史事件 上一篇文章我们讲的是 SpringBoot 集成 kafka 消费最新的事件&#xff0c;如果没有看过的小伙伴可以看这篇文章&#xff1a;SpringBoot 集成 kafka 那如果我们想消费历史的事件应该怎么办呢&#xff1f; 方法…

性能测试经典案例解析——政务查询系统

各位好&#xff0c;我是 道普云 一站式云测试SaaS平台。一个在软件测试道路上不断折腾十余年的萌新。 欢迎关注我的主页 道普云 文章内容具有一定门槛&#xff0c;建议先赞再收藏慢慢学习&#xff0c;有不懂的问题欢迎私聊我。 希望这篇文章对想提高软件测试水平的你有所帮…

docker拉取redis5.0.5并建立redis集群

1.配置文件 mkdir -p redis-cluster/7001/ mkdir -p redis-cluster/7002/ mkdir -p redis-cluster/7003/ mkdir -p redis-cluster/7004/ mkdir -p redis-cluster/7005/ mkdir -p redis-cluster/7006/cd redis-clustervim 7001/redis.confbind 0.0.0.0port 7001cluster-enabled…

IJCAI-信也科技杯全球AI大赛-华东师范大学亚军队伍分享

作者&#xff1a;彭欣怡(找不到工作版) 华东师范大学; 马千里(搬砖版) 虾皮; 指导&#xff1a;闫怡搏(科研版) 华东师范大学 比赛链接&#xff1a;https://ai.ppdai.com/mirror/goToMirrorDetailSix?mirrorId34 前言 这是我们首次参加语音领域的比赛&#xff0c;最初只是抱着…

【C语言】---- 复合数据类型之结构体(Struct)

在C语言中&#xff0c;结构体是一种用户定义的数据类型&#xff0c;它允许将不同类型的数据组合成一个整体。结构体在编程中扮演着非常重要的角色&#xff0c;它可以用于表示复杂的数据结构&#xff0c;提高程序的可读性和可维护性。 结构体的定义 结构体的定义使用 struct 关…

C语言程序设计 笔记代码梳理 重制版

前言 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute) 2.C语言编写代码到运行 都是先编译&#xff0c;后链接&#xff0c;最后运行。&#xff08;.c ---> .obj --->.exe&#xff09;这个过…

开发适合el-dialog的拉伸拖拽自定义指令和适配自定义的图片查看组件

目录 一、应用场景 二、开发流程 1.自定义指令 2.功能原理 3.难点 三、详细开发 四、总结 一、应用场景 我之前有开发过一个图片查看的组件&#xff0c;这个组件可在单页面打开&#xff0c;也可以在弹窗里打开&#xff0c;但是弹窗因为是比较固定&#xff0c;所以有一些…

ubuntu 安装 jdk

1.安装java开发环境包jdk sudo apt update sudo apt install openjdk-8-jdk 2.配置环境变量 步骤二:配置环境变量 安装完JDK后&#xff0c;我们需要配置环境变量&#xff0c;以便系统能够正确地找到Java相关的可执行文件。打开终端并执行以下命 sudo nano /etc/environment 这…

常见限流算法-固定窗口、滑动窗口、漏桶、令牌桶

为什么需要限流 限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的。一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到的需要限制的阈值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:延迟处理,拒绝处理…