C/C++中局部变量static用法实例

1. 普通局部变量存储于进程栈空间,使用完毕会立即释放,静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0,并且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。**

示例

#include <iostream>
using namespace std;
void test(void){
    static int Sys_Mode = 0;
    cout<<"1_out:"<<Sys_Mode<<endl;
    Sys_Mode = Sys_Mode + 1;
    cout<<"2_out:"<<Sys_Mode<<endl;

}

int main() {
    test();
    test();
    test();
    return 0;
}

输出结果:

可以从输出结果中看到:

静态局部变量的效果跟全局变量相似,位于函数体内部的静态局部变量初始化,并不会随着函数调用结束释放内存空间。

2. 全局变量

全局变量定义在函数体外部,在全局数据区分配存储空间,且编译器会自动对其初始化。

普通全局变量对整个工程可见,其他文件可以使用extern外部声明后直接使用。也就是说其他文件不能再定义一个与其相同名字的变量了(否则编译器会认为它们是同一个变量)。

静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。

3.总结

static是一个很有用的关键字,使用得当可以使程序锦上添花。用于本文件的函数要使用static关键字声明,这是一个良好的编码风格。

4.项目中使用案例:

RouteBuildingQuery* RouteBuildingQuery::GetInstance()
{
	static RouteBuildingQuery globalRouteInterestPoint;
	return &globalRouteInterestPoint;
}

这段代码是一个单例模式的实现,用于获取一个全局唯一的 RouteBuildingQuery 实例。具体来说:

  • RouteBuildingQuery 类的 GetInstance() 方法是一个静态方法。
  • 在方法内部,定义了一个静态局部变量 globalRouteInterestPoint,它是 RouteBuildingQuery 类的一个对象实例,并且被声明为静态的。
  • 每次调用 GetInstance() 方法时,都会返回指向 globalRouteInterestPoint 的指针。
  • 由于 globalRouteInterestPoint 是静态的局部变量,因此它只会在程序第一次调用 GetInstance() 方法时进行初始化,并且在整个程序的生命周期内保持不变。
  • 这种方式确保了 RouteBuildingQuery 类的实例始终只有一个,并且可以通过 GetInstance() 方法来获取。

相关推荐

  1. C/C++static关键字用法总结

    2024-04-09 16:54:02       39 阅读
  2. C++自动变量和static声明静态局部变量

    2024-04-09 16:54:02       52 阅读
  3. C++ 关键字 Static

    2024-04-09 16:54:02       61 阅读
  4. 什么是CI/CD?如何在PHP项目实施CI/CD

    2024-04-09 16:54:02       63 阅读
  5. Python实战:全局变量与局部变量

    2024-04-09 16:54:02       50 阅读
  6. c++static的作用

    2024-04-09 16:54:02       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 16:54:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 16:54:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 16:54:02       87 阅读
  4. Python语言-面向对象

    2024-04-09 16:54:02       96 阅读

热门阅读

  1. 设计模式:责任链模式

    2024-04-09 16:54:02       34 阅读
  2. git分支-分支管理

    2024-04-09 16:54:02       33 阅读
  3. Python模拟退火算法

    2024-04-09 16:54:02       35 阅读
  4. Docker 国内镜像

    2024-04-09 16:54:02       31 阅读
  5. Linux_实用技巧

    2024-04-09 16:54:02       33 阅读
  6. 【接口】HTTP(2) |请求方法及状态码

    2024-04-09 16:54:02       38 阅读
  7. 程序员如何搞副业

    2024-04-09 16:54:02       32 阅读
  8. Leetcode 459. 重复的子字符串

    2024-04-09 16:54:02       32 阅读