下面随笔记录了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. zjnu1762 U (线段树)

    Description Mirko is hungry as a bear, scratch that, programmer and has stumbled upon a local restau ...

  2. Codeforces Round #570 (Div. 3) G. Candy Box (hard version) (贪心,优先队列)

    题意:你有\(n\)个礼物,礼物有自己的种类,你想将它们按种类打包送人,但是打包的礼物数量必须不同(数量,与种类无关),同时,有些礼物你想自己留着,\(0\)表示你不想送人,问你在送出的礼物数量最大的 ...

  3. 一篇文章图文并茂地带你轻松学完 JavaScript 设计模式(二)

    JavaScript 设计模式(二) 本篇文章是 JavaScript 设计模式的第二篇文章,如果没有看过我上篇文章的读者,可以先看完 上篇文章 后再看这篇文章,当然两篇文章并没有过多的依赖性. 5. ...

  4. Cobbler服务引导第三方PE系统

    通过Cobbler服务引导第三方PE系统 1.上传第三方ios到/root/Ushendu_win10.iso并增加菜单项 cobbler distro add --name=Ushendu_win1 ...

  5. VS2010的单元测试(一)

    在VS2010中,单元测试的功能很强大,使得建立单元测试和编写单元测试代码,以及管理和运行单元测试都变得简单起来,通过私有访问器可以对私有方法也能进行单元测试,并且支持数据驱动的单元测试. 一.创建单 ...

  6. 牛客网多校第5场 F take 【思维+数学期望】

    题目:戳这里 思路来源:视频讲解 题意:有n个箱子按1...n标号,每个箱子有大小为di的钻石概率为pi,我们初始有个大小为0的钻石,从1到n按顺序打开箱子,遇到比手中大的箱子就换,求交换次数的数学期 ...

  7. linux通识

    linux是服务器应用领域的开源且免费的多用户多任务操作系统的内核. 以下是对上述论断的解释: 操作系统 简言之,操作系统乃是所有计算设备的大管家,小到智能手表,大到航天航空设备,所有需要操控硬件的地 ...

  8. 如何取消一个 Ajax 请求

    如何取消一个 Ajax 请求 jQuery XMLHttpRequest.abort() https://stackoverflow.com/questions/446594/abort-ajax-r ...

  9. 钉钉 & URL Scheme & Universal Link & Deep Link

    钉钉 & URL Scheme & Universal Link & Deep Link DD link https://www.cnblogs.com/xgqfrms/p/1 ...

  10. js 实现各种算法 APP

    js 实现各种算法 APP 常见算法: 排序,搜索/查找,枚举,遍历,最短路径,二叉树 open source web app desktop app react native app flutter ...