当前位置: 首页 > web >正文

域与对象的生命周期

域与对象的生命周期

域的概念

域 (scope) 表示了程序中的一部分,其中的名称有唯一的含义
● 全局域( global scope ):程序最外围的域,其中定义的是全局对象
● 块域( block scope ),使用大括号所限定的域,其中定义的是局部对象
● 还存在其它的域:类域,名字空间域……

本质特征: 表示程序中名称具有唯一含义的部分区域,可包含变量、函数、类型别名等各类名称定义
核心作用: 解决名称冲突问题,例如在不同函数中定义同名变量int x=3不会产生重复定义错误
典型示例: 全局域中的x=3与函数域中的x=3属于不同实体,编译器通过域区分其存储空间

namespace MyNS{ //名字空间域int x = 3;void fun(){ } //名字空间域中的函数using MyInt = int; //名字空间域中的类型别名
}
using MyInt = float; //全局域中定义的类型别名
int x = 3; //全局域
void func(){ //全局域中的函数int x = 3;
}
int main(){int x = 3;
}

● 域可以嵌套,嵌套域中定义的名称可以隐藏外部域中定义的名称

int x = 3;
int main(){int x = 3; //局部域变量把全局域的同名称变量隐藏了std::cout << x << '\n'; //打印局部域变量
}

对象的生命周期

● 对象的生命周期起始于被初始化的时刻,终止于被销毁的时刻
● 通常来说
– 全局对象的生命周期是整个程序的运行期间
– 局部对象生命周期起源于对象的初始化位置,终止于所在域被执行完成

int x = 4; //全局对象
int main(){ int x = 3; //局部对象{std::cout << x << '\n'; // x输出3int x = 5; //局部对象std::cout << x << '\n'; // x输出5}// x = 5的对象被销毁
}// x = 3的对象被销毁
#include<iostream>
using namespace std;void useLocal();
void useStaticLocal();
void useGlobal();int x{1}; //global variableint main() {cout << "global x in main is " << x << '\n'; // 1const int x{5}; //local variable to maincout << "local x in main's outer scope is " << x << '\n'; // 5{ //block starts a new scopeconst int x{7};cout << "local x in main's inner scope is " << x << '\n'; //7}//7被销毁useLocal(); //25,26useStaticLocal(); //50,51useGlobal(); //1,10useLocal(); //25,26useStaticLocal(); //51,52useGlobal(); //10,100cout << "\nlocal x in main is " << x << '\n'; //5return 0;
}void useLocal(){int x{25};cout << "\nlocal x is " << x << " on entering useLocal\n"; //25++x;cout << "local x is " << x << " on exiting useLocal\n"; //26
}void useStaticLocal(){static int x{50}; //静态x被创建cout << "\nlocal static x is " << x << " on entering useStaticLocal\n"; //50++x;cout << "local x is " << x << " on exiting useStaticLocal\n"; //51
} //静态x未被销毁void useGlobal(){cout << "\nglobal x is " << x << " on entering useGlobal\n"; //1x *= 10;cout << "global x is " << x << " on exiting useGlobal\n"; //10
}

最小特权原则,这是良好软件工程的基本准则。该原则指出:代码应仅被授予完成其指定任务所需的特权和访问权限,而不应更多
局部变量的作用域就是一个例子:当不需要时,它不应可见。
局部变量在函数被调用时创建,在函数执行期间使用,函数返回时销毁
最小特权原则通过防止代码意外(或恶意)修改不可访问的变量值,使程序更健壮,同时也使程序更易于阅读和维护。
通常,变量应声明在其需要被访问的最窄作用域中。仅在特定函数中使用的变量应声明为该函数的局部变量,而非全局变量。

下图来自:内存五大区:(栈、堆、全局静态区、常量区、代码区)(线程、函数栈、栈帧)


http://www.xdnf.cn/news/14549.html

相关文章:

  • Python文件与目录操作管理详解
  • 装饰模式Decorator Pattern
  • 阿里开源的MaskSearch:教AI学会“自己找答案”的魔法书
  • GO语言---panic和recover关键字
  • SpringAI+DeepSeek大模型应用开发——6基于MongDB持久化对话
  • 内存一致性模型
  • 人工智能学习31-开发框架
  • 【技术实战】工业级设备健康管理系统搭建全栈指南:从数据采集到预测性维护
  • C++与C如何相互调用
  • 盟接之桥EDI软件:开启制造业数据对接与协同的新纪元
  • Requests源码分析01:运行tests
  • 结构学习的理论(第1、2章)
  • OpenKylin安装运行ssh及sftp服务
  • 缓冲区技术
  • SCAU大数据技术原理雨课堂测验2
  • NodeJS11和10以及之前的版本,关键差异?
  • 大模型<闲谈>
  • 6.14打卡
  • 解决虚拟环境中文绘图显示问题
  • 【DVWA系列】——SQL注入——low详细教程
  • CFD仿真硬件选型建议
  • Python高效操作MySQL数据库
  • 2025最新Nvm安装教程
  • ceil方法
  • linux多线程之可重入函数
  • 618背后的电商逻辑重构:从价格血战到价值共生
  • nlp和大模型
  • 深入剖析AI大模型:GPU在大模型训练与推理的性能抉择
  • gpfs的安装配置与部署
  • C语言:Linux libc和glibc的历史