首页 > 编程语言 >C++:储存持续性、作用域及链接性

C++:储存持续性、作用域及链接性

时间:2022-09-23 00:11:24浏览次数:64  
标签:储存 函数 作用域 C++ int 链接 变量

  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

相关文章