下面随笔记录了C++对象的生存期知识

静态生存期

  • 这种生存期与程序的运行期相同。

  • 在文件作用域中声明的对象具有这种生存期。

  • 在函数内部声明静态生存期对象,要冠以关键字static 。

动态生存期

  • 块作用域中声明的,没有用static修饰的对象是动态生存期的对象(习惯称局部生存期对象)。

  • 开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。

举例代码

 1 #include<iostream>
2
3 using namespace std;
4
5 int i = 1; // i 为全局变量,具有静态生存期。
6
7 void other() {
8
9   static int a = 2;
10
11   static int b;
12
13   // a,b为静态局部变量,具有全局寿命,局部可见。
14
15   //只第一次进入函数时被初始化。
16
17   int c = 10; // C为局部变量,具有动态生存期,
18
19   //每次进入函数时都初始化。
20
21   a += 2; i += 32; c += 5;
22
23   cout<<"---OTHER---\n";
24
25   cout<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl;
26
27   b = a;
28
29 }
30
31
32
33 int main() {
34
35   static int a;//静态局部变量,有全局寿命,局部可见。
36
37   int b = -10; // b, c为局部变量,具有动态生存期。
38
39   int c = 0;
40
41   cout << "---MAIN---\n";
42
43   cout<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl;
44
45   c += 8; other();
46
47   cout<<"---MAIN---\n";
48
49   cout<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl;
50
51   i += 10; other();
52
53   return 0;
54
55 }

运行结果

 1 运行结果:
2
3 ---MAIN---
4
5 i: 1 a: 0 b: -10 c: 0
6
7 ---OTHER---
8
9 i: 33 a: 4 b: 0 c: 15
10
11 ---MAIN---
12
13 i: 33 a: 0 b: -10 c: 8
14
15 ---OTHER---
16
17 i: 75 a: 6 b: 4 c: 15

C++对象的生存期笔记的更多相关文章

  1. C++中临时对象的学习笔记

    http://www.cppblog.com/besterChen/category/9573.html 所属分类: C/C++/STL/boost  在函数调用的时候,无论是参数为对象还是返回一个对 ...

  2. windows内核对象管理学习笔记

    目前正在阅读毛老师的<windows内核情景分析>一书对象管理章节,作此笔记. Win内核中是使用对象概念来描述管理内核中使用到的数据结构.此对象(Object)均是由对象头(Object ...

  3. JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)

    1.事件冒泡与事件捕获 2.事件与事件句柄   3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处:     1.每个函 ...

  4. JavaScript权威设计--Window对象(简要学习笔记十三)

    1.Window对象是所有客户端JavaScript特性和API的主要接入点. Window对象中的一个重要属性是document,它引用Document对象. JavaScript程序可以通过Doc ...

  5. JavaScript权威设计--JavaScript对象(简要学习笔记八)

    1.属性的特性 一个属性包含一个名字和4个特性.4个特性:值,可写性,可枚举性,可配置性   2.对象的三个属性 一:原型属性 要想检测一个对象是否是另一个对象的原型,使用isPrototypeOf( ...

  6. JavaScript权威设计--JavaScript对象(简要学习笔记七)

    1.with语句 语法: width(object){ statement } with语句可用于临时扩展作用域链.作用域链可以按序检索的对象列表,通过它可以进行变量名解析. with将object添 ...

  7. JSP内置对象之request对象【学习笔记】

    request对象是JSP中重要的对象,每个request对象封装着一次用户的请求,并且所有的请求参数都被封装在request对象中,因此request对象是获取请求参数的重要途径. 一.获取请求头与 ...

  8. <<面向模式的软件架构2-并发和联网对象模式>>读书笔记

    服务访问和配置模式 Wrapper Facade可以将有非对象API提供的函数和数据封装到面向对象的类接口中 就是把底层API再封装一次,让外部不用关心是调用哪个平台的API,不如锁,在不同的平台上可 ...

  9. HTTP脚本化——XMLHttpRequest对象的学习笔记

    一. HTTP 请求和响应 一个HTTP请求由4部分组成 HTTP请求方法(也叫动作Verb) 正在请求的URL 一个可选的请求头集合(可能包含身份验证信息等) 一个可选的请求主体 服务器返回的HTT ...

随机推荐

  1. 病毒侵袭 HDU - 2896 板子题

    当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年一遇的世界奇观,那是多么幸福的事儿啊~~ 但网路上总有那么些网站,开 ...

  2. 洛谷 P5837 [USACO19DEC]Milk Pumping G (单源最短路,dijkstra)

    题意:有一\(n\)个点,\(m\)条边的双向图,每条边都有花费和流量,求从\(1\)~\(n\)的路径中,求\(max\frac{min(f)}{\sum c}\). 题解:对于c,一定是单源最短路 ...

  3. CF1475-D. Cleaning the Phone

    CF1475-D. Cleaning the Phone 题意: 手机上有很多应用非常占用内存,你要清理内存.对于每个应用\(i\)有以下描述:应用\(i\)占用了\(a_i\)的空间,它的方便度为\ ...

  4. Python_小程序

    一.开发前的准备工作 1.申请AppID:一个账号对应一个小程序,个人/个体只能申请5个小程序 2.下载开发工具 二.小程序的文件结构 三. 1.数据绑定 1.1数据的设置 Page( data:{ ...

  5. OpenStack Train版-9.安装neutron网络服务(计算节点)

    在计算节点安装neutron网络服务(computel01计算节点192.168.0.20)安装组件 yum install openstack-neutron-linuxbridge ebtable ...

  6. VXLAN学习之路-结合VRF在Linux中实践VXLAN网络

    一.概述 近期在在搞网络安全HCIE.CISP的认证的事,顺便将VXLAN技术再次系统的学习一下,学习过程中看到云原生实验室里的一篇文章,就是关于VXLAN在Linux系统中的实践,感觉文章写得很好, ...

  7. Linux 驱动框架---linux 设备

    Linux 设备 Linux驱动中的三大主要基础成员主要是设备,总线和驱动.今天先来从设备开始分析先把设备相关的数据结构放到这里方便后面看到来查,其中有些进行了简单的注释. struct device ...

  8. webpack 打包性能优化

    webpack 打包性能优化 开启多线程打包 thread-loader https://www.npmjs.com/package/thread-loader https://github.com/ ...

  9. PWA All In One

    PWA All In One chrome://apps/ PWA Progressive Web App 可安装,添加到主屏 离线使用 轻量,快速 基于 Web 技术一套代码多端复用(移动端,桌面端 ...

  10. VIM 官方教程

    VIM 官方教程 zh-hans vim official documents https://www.vim.org/docs.php https://vimhelp.org/ translatio ...