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

【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.kler.cn/a/291629.html

相关文章:

  • 【学习记录】浏览器指纹相关学习记录(指纹介绍、获取指纹、修改指纹、随机指纹保护隐私等)
  • 左神算法基础巩固--1
  • AI的进阶之路:从机器学习到深度学习的演变(三)
  • 周末总结(2024/12/21)
  • 【Lua热更新】上篇
  • 1小时放弃Rust(2): 两数之和
  • 【ORACLE】独有的函数
  • 数据结构代码集训day13(适合考研、自学、期末和专升本)
  • 华为认证是什么?HCIA/HCIP/HCIE是什么?
  • Java8对接三方流式接口,并实时输出(GPT)
  • 【数据库】Oracle和Mysql的区别
  • 多媒体应用设计师需要掌握多种软件
  • 动态化-鸿蒙跨端方案介绍
  • C++day6
  • MySQL5.7.36之主从复制增强半同步复制-centos7
  • Linux下数据库相关知识点及SQLite3相关知识,和callback回调函数
  • 【区块链 + 供应链】长虹生产物料质量信息管理系统 | FISCO BCOS应用案例
  • 初始QT!
  • [线程]单例模式 及 指令重排序
  • CodeSys中动态切换3D模型
  • 计算机知识科普问答--1
  • QT教程:start()和startTimer()的区别
  • 运维学习————kafka(1)
  • 【LVI-SAM】激光点云如何辅助视觉特征深度提取
  • 前端黑科技:使用 JavaScript 实现网页扫码功能
  • ElasticSearch-关联关系