C++11的存储类别会影响信息在文件间的共享,一共有四种方案来保存数据,也就是变量的保存时间,而作用域决定变量的保存范围。
持续时间
- 自动存储连续性:函数内部定义中声明的变量,函数执行时被创建内存空间保存变量,函数执行完毕后空间释放,因此作用域为局部的。
- 静态存储连续性:函数外部定义的变量,存在整个代码的生命周期,比如全局变量,static,因此作用域为全局。
- 线程存储连续性:用于多核CPU的多线程编程,如果是thread_local生命的,则存在代码整个声明周期,暂时不考虑并行编程。
- 动态存储连续性:new的内存空间就是动态,动态内存空间管理开发者自行把控,作用域为开辟变量的内存空间是局部还是全局。
作用域
局部变量:函数内部的变量,只能在同级{}及子集{}中使用。
全局变量:全局文件都可以调用,可在所有函数中使用。
C++的函数只能是整个class类或整个命名空间,但不能是局部的。
链接性
链接性为外部的名称(extern)可以在文件间共享,链接性为内部的名称只能在文件内部共享。自动变量(函数内部)的名称没有链接性。
#include <iostream>
using namespace std;
void oil(int x);
int a = 10;//全局变量,静态储存,无链接性
extern int b = 12;//全局变量,静态储存,有链接性
int main(void)
{
int tex = 31;//局部变量,静态储存
int year = 2022;//局部变量,静态储存
cout << tex << " " << &tex << endl;
cout << year << " " << &year << endl;
oil(tex);
return 0;
}
void oil(int x/*局部变量,自动储存*/)
{
cout << "in oil(x) :" << x << " " << &x << endl;//只在最近的{}内有效
{//tex只在最近的{}内有效
int tex = 31;
cout << "in oil(tex) :" << tex << " " << &tex << endl; //局部变量, 自动储存
cout << "in oil(x) :" << x << " " << &x << endl;
}
}
因此若在函数内与函数外定义了同名的变量,编程时需要特别注意变量的持续时间。
标签:储存,函数,作用域,C++,int,链接,变量 From: https://www.cnblogs.com/YiMo9929/p/16721298.html