如果说 全局变量“不受时间和空间限制”,那static变量是“不受时间限制,但受空间限制”。“不受时间限制”是指到程序运行结束时才释放,“受空间限制”是指 仅能在特定的作用域中使用。
照此理解,应优先考虑使用static变量而非全局变量,前者“权限”更小,更安全。
头文件中的全局变量,可以被引用该头文件的源文件共享;而头文件中的static变量,不能被引用该头文件的源文件共享,这些源文件中的同名static变量彼此独立。下面是一个代码示例。
main.cpp
#include "test1.h"
#include "test2.h"
int main(){
func1();
func1();
func2();
func2();
func1();
func2();
return 0;
}
static.h
#ifndef __STATIC_H
#define __STATIC_H
static int var = 1;
#endif
test1.h
#ifndef __TEST1_H
#define __TEST1_H
void func1();
#endif
test1.cpp
#include <iostream>
#include "static.h"
void func1(){
var += 10;
std::cout << "in test1::func1 : var = " << var << std::endl;
return;
}
test2.h
#ifndef __TEST2_H
#define __TEST2_H
void func2();
#endif
test2.cpp
#include <iostream>
#include "static.h"
void func2(){
var += 1;
std::cout << "in test2::func2 : var = " << var << std::endl;
return;
}
$ ./main
in test1::func1 : var = 11
in test1::func1 : var = 21
in test2::func2 : var = 2
in test2::func2 : var = 3
in test1::func1 : var = 31
in test2::func2 : var = 4
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。