C++:储存持续性、作用域及链接性
C++11的存储类别会影响信息在文件间的共享,一共有四种方案来保存数据,也就是变量的保护时间,而作用域决定变量的保存范围。
持续时间
- 自动存储连续性:函数内部定义中声明的变量,函数执行时被创建内存空间保存变量,函数执行完毕后空间释放,因此作用域为局部的。
- 静态存储连续性:函数外部定义的变量,存在整个代码的生命周期,比如全局变量,static(局部变量)。
- 线程存储连续性:用于多核CPU的多线程编程,如果是thread_local,则存在代码整个声明周期,暂时不考虑并行编程。
- 动态存储连续性:new的内存空间就是动态,动态内存空间管理开发者自行把控,作用域为开辟变量的内存空间是局部还是全局。
作用域
局部变量:函数内部的变量,只能在同级{}及子集{}中使用。
全局变量:全局文件都可以extern声明后调用,可在所有函数中使用。
C++的函数只能是整个class类或整个命名空间,但不能是局部的。
链接性
链接性为外部的名称(extern)可以在文件间共享,链接性为内部的名称只能在文件内部共享。自动变量(函数内部)的名称没有链接性。
#include <iostream> using namespace std; void oil(int x); int a = 10;//静态储存,全局变量,外部链接性(extern) static int harry=10;//静态储存,全局变量,内部链接性 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; } }
因此若在函数内与函数外定义了同名的变量,编程时需要特别,产生上述错误编译器会帮助你检查,但是前提是我们规范使用const、static、extern,这样编译器报错第一时间自己就知道哪里出错了。全局变量建议使用结构体进行统一管理,便于对部分变量进行const或者mutable。
本文来自博客园,作者:{张一默},转载请注明原文链接:https://www.cnblogs.com/YiMo9929/p/16721298.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了