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

域与对象的生命周期

域与对象的生命周期

域的概念

域 (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
}

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

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


相关文章:

  • WSL备份与还原
  • Python函数基础知识(2/3)
  • SAP顾问职位汇总(第24周)
  • IDA动态调试环境配置全流程
  • Arduino入门教程:6、计时与定时
  • [从0到1]环境准备--anaconda与pycharm的安装
  • NodeJS怎么通过集群提高NodeJS的性能
  • 第一章 绪论
  • leetcode138-随机链表的复制
  • 《k8s 部署》常见报错类型1
  • 前端面试九之Vue Router
  • 【驱动设计的硬件基础】I²C
  • scikit-image (skimage) 完整API参考文档
  • AI是什么?大模型、语料、训练、推理、机器学习、神经网络等专业名词如何关联
  • cuda编程笔记(2.5)--简易的应用代码
  • 5.5.2_1并查集
  • Vue3优质动画库推荐
  • 在windows10上安装nvm以及配置环境
  • Claude Code 是什么?
  • 刷leetcode hot100返航版--字符串6/15
  • 档案网站建设网页/网络广告联盟
  • wordpress自定义分类名称/网站推广优化外包便宜
  • 网站程序源代码/高质量外链购买
  • 做同城网站赚钱吗/网店如何营销推广
  • 提供邯郸手机网站建设/优化网站排名茂名厂商
  • 给企业做网站的业务员/怎么推广app