当前位置: 首页 > news >正文

【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;  // 仅在该文件内可见

特点:

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

总结

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Harmony TextInput实现带有提示语的Text效果
  • Linux之MySQL日志
  • java 中简单实现异步的几种方法
  • Falcon Mamba:首个高效的无注意力机制7B模型
  • knime和Python两种解法提取斜杠(/)或反斜杠(\)分隔前后数据
  • 工时管理遇难题?试试这款系统解决方案
  • 强化学习——马尔可夫决策过程的理解
  • 2024年直面天命!2025年或将成为未来十年最容易获批国自然的一年?
  • elementUI——checkbox复选框监听不到change事件,通过watch监听来解决——基础积累
  • JavaWeb【day08】--(MySQL-Mybatis入门)
  • 悟空CRM12密码登录算法类
  • FFmpeg源码:compute_frame_duration函数分析
  • GDB:加载符号表
  • Spring-容器:IOC-基于注解管理Bean
  • xxl-job升级到springboot3.0 导致页面打不开报错)问题
  • hexo+github搭建个人博客
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • CSS魔法堂:Absolute Positioning就这个样
  • ES6--对象的扩展
  • hadoop集群管理系统搭建规划说明
  • IP路由与转发
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript异步流程控制的前世今生
  • Java的Interrupt与线程中断
  • Java深入 - 深入理解Java集合
  • js递归,无限分级树形折叠菜单
  • JS专题之继承
  • node入门
  • QQ浏览器x5内核的兼容性问题
  • Ruby 2.x 源代码分析:扩展 概述
  • 包装类对象
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 手写双向链表LinkedList的几个常用功能
  • 通过npm或yarn自动生成vue组件
  • 项目实战-Api的解决方案
  • 回归生活:清理微信公众号
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 我们雇佣了一只大猴子...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #控制台大学课堂点名问题_课堂随机点名
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (回溯) LeetCode 46. 全排列
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 未来三学期想要修的课 (日記)
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • (自用)网络编程
  • ***监测系统的构建(chkrootkit )
  • .bat批处理(一):@echo off