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

【C++八股】静态局部变量/全局变量/局部变量的区别和使用场景

1. 静态局部变量 (Static Local Variable)

  • 作用域:静态局部变量的作用域仅限于函数或代码块内部,就像普通局部变量一样,但其生命周期不同。
  • 生命周期:静态局部变量的生命周期是整个程序的运行期间,它只会在第一次调用时初始化,并在程序退出时销毁。即使函数调用结束,静态局部变量的值也会被保留,直到下次进入函数时继续使用上次的值。
  • 存储类型:声明时需要使用 static 关键字。
void func() {
    static int x = 0;  // 静态局部变量
    x++;
    std::cout << x << std::endl;
}

2. 全局变量 (Global Variable)

  • 作用域:全局变量的作用域是整个文件,甚至跨文件(如果使用 extern 关键字)。它可以在所有函数中访问。
  • 生命周期:全局变量在程序启动时创建,并在程序结束时销毁。它在整个程序执行期间都存在,所有函数可以访问和修改它。
  • 存储类型:默认是静态的(静态存储期),即在程序整个运行周期内有效。
int x = 0;  // 全局变量

void func() {
    x++;  // 访问全局变量
    std::cout << x << std::endl;
}

int main() {
    func();  // 输出: 1
    func();  // 输出: 2
    return 0;
}
使用场景
  • 适用于程序中多个函数需要共享和修改相同的数据。例如配置参数、共享的状态、或者全局标志等。
  • 使用时需要小心,因为全局变量可能会影响程序的可维护性和可读性,尤其是在大型项目中。

3. 局部变量 (Local Variable)

  • 作用域:局部变量的作用域仅限于函数或代码块内部。它在函数被调用时创建,并在函数结束时销毁。
  • 生命周期:仅在函数或代码块的执行期间存在。每次函数调用时都会重新创建该变量,调用结束后销毁。
  • 存储类型:默认是自动分配的,也就是 自动变量,不需要显式声明。
void func() {
    int x = 5;  // 局部变量
    std::cout << x << std::endl;
}
使用场景
  • 用于函数内部临时存储数据,不需要在其他函数中访问的情况。

总结对比

总结

  • 局部变量:适用于函数内部临时存储,作用域小,生命周期短,适用于不需要在多次函数调用之间保持状态的场景。
  • 静态局部变量:适用于需要在多次函数调用中保持状态或值的场景,如计数器、状态跟踪等。
  • 全局变量:适用于需要在多个函数中共享的全局数据,但应小心使用,避免引起数据冲突或不必要的依赖。

http://www.kler.cn/a/543959.html

相关文章:

  • ds-download-link 插件:以独特图标选择,打造文章下载链接
  • CSS 属性选择器详解与实战示例
  • 自己动手实现一个简单的Linux AI Agent
  • 如何通过腾讯 ima.copilot 训练自己的知识库
  • Odoo17 0.1常见的QWeb 模板语言指令的详细总结
  • CSS 实现下拉菜单效果实例解析
  • Redis混合持久化
  • 细说STM32F407单片机RTC的基本原理及闹钟和周期唤醒功能的使用方法
  • 在Windows 7操作系统,基于llama.cpp本地化部署 deepseek-r1模型的方法 2025-02-08
  • SQL-leetcode—1393. 股票的资本损益
  • 如何使用智能化RFID管控系统,对涉密物品进行安全有效的管理?
  • 计算机网络-MPLS基础概念
  • C++ ——基础进阶
  • Seaweedfs(master volume filer) docker run参数帮助文档
  • 性能优化中的服务器与操作系统优化
  • 华为云kubernetes基于keda自动伸缩deployment副本(监听redis队列长度)
  • 在亚马逊云科技上一键自动部署Falcon3大语言模型
  • 11.推荐系统的安全与隐私保护
  • 对gru的理解
  • 【C++八股】C++内存管理
  • 从360度全景照片到高质量3D场景:介绍SC-Omnigs 3D重建系统
  • redis持久化原理相关面试题剖析
  • 期权帮 | 股指期货交易:规则速览与解读!
  • SpringBoot速成(九)获取用户信息 P9-P10
  • git - 克隆带子模块的git工程的方法
  • windows蓝牙驱动开发-支持蓝牙事件通知