static 在C语言中有两层含义:1. 存储是持久存储的  2. 访问是受限的

static in c++

C++ 中更复杂,因为有成员变量和成员函数。 C 中 全局变量static 那么该变量就只在.c 文件内有效,本地变量 static 那么该变量就是持久存储,static 的本地变量就是全局变量,static 函数只能在这个 .c 内被访问。 C++ 还有 static 成员变量 和 static 成员函数。

two basic meanings

  • static storage

    • allocated one at fixed address
  • visibility of a name
    • internal linkage
  • don't use static expect inside functions and classed

uses of "static" in c++

static free functions internal linkage(deprecated)
static global variables internal linkage(deprecated)
static local variable persistent storage
static member variable shared by all instances
static member function shared by all instances,can only access static member variables

global static hidden in file   C 语言中

编译器可以过,但是链接不行。 加上static, 变量 s_local 和 函数 hidden,只有在文件1 中可以被访问。

static inside functions  static在函数里面

  • value is remembered for entire program   static 本地变量其实就是全局变量

  • initialization occurs only once    只能在函数内部被访问

  • example

    • count the numbers times the function has been called

      void f(){static int num_calls = 0;...num_calls++;
      }

static applied to objects   static本地变量类型是个类的话?

它在哪里?   内存

它什么时候被构造出来的?

  • suppose you have a class

    class X{X(int ,int);~X();...
    };
  • and a function with a static X object

    void f(){static X my_X(10,20); // 可以所有对象都有一个隐藏变量来表示是否初始化过...
    }

    它在哪里和什么时候初始化是不一样的,内存在link的时候已经被分配好了,内存里的变量需要去初始化的,C++可以利用的一点是vPtr,如果如果vPtr被初始化过那么它是有效的东西--vtable的地址,否则是乱七八糟的东西,不是所有的类都有vPtr,目前的格局是实现不了的(通过类的某个已有的成员是实现不了的,想法不错,将来可以自己实现OOP语言)。在java中没有被初始化的东西是不能得到的,只有通过new才行

static applied to objects...

  • construction occurs when definition is encountered

    • constructor called at-most once       构造只发生一次
    • the constructor arguments must be satisfied
  • destruction takes place on exit from program
    • compiler assures LIFO order of destructors

conditional construction

  • example:conditional construction

    void f(int x){if(x>10){static X my_X(x,x*21);...}
    }
  • my_X

    • is constructed once,if f() is ever called with x>10
    • retains its value
    • destroyed only if constructed

本地变量,析构在离开函数时候发生;new delete 时候发生;全局变量 程序结束时候发生。

global objects   全局对象

  • consider

    #include "X.h"
    X gloable_x(12,34);
    X gloable_X2(8,16);

空间:全局数据区;什么时候分配空间:编译或链接时候;什么时候构造:在main()之前。什么调用析构:main() 结束时候或调用了 exit(),就是程序结束时候。

  • constructors are called before main() is entered

    • order controlled by appearance in fine
    • in this case,global_x before global_x2
  • main() is no longer the first function called     程序跑的时候main() 并不是第一个运行的

    • main() exits
    • exit() is called

static initialization dependency

多个 .cpp 文件,每个文件内都有全局变量,这些全局变量谁先初始化,没有规定,可能每次编译都不一样。它们之间可能有依赖的。跨文件的初始化顺序不行。

解决:1  别这么干   2. 所有的有依赖全局变量放在一个地方  3.像 java 中没有全局变量

  • order of construction within a file is known
  • order between files is unspecified!
  • problem when non-local static objects in different files have dependences
  • a non-local static object is:
    • defined at global or namespace scope
    • declared static in a class
    • defined static at file scope

【翁恺】25-静态对象相关推荐

  1. 我的《翁恺Java面向对象程序设计》同步笔记

    边看视频边记录的,翁恺视频中的项目代码都放里面了. 一些图表关系也高清重置了. JAVA/面向对象学习笔记(1) | 轻笑Chuckle所看教程(视频):<浙江大学-翁恺-Java-面向对象程序 ...

  2. c++基础入门(根据浙大翁恺老师视频整理)

    把以前的笔记搬上来一下 根据浙大翁恺老师视频整理 https://www.bilibili.com/video/BV1yQ4y1A7ts?p=2 01第一个c++程序 02什么是对象 通过操作访问数据 ...

  3. 面向对象程序设计-C++(视频) 浙江大学 翁恺老师

    网易云课堂视频转存:面向对象程序设计-C++(视频) 浙江大学 翁恺老师 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012183487/art ...

  4. 翁恺老师 | 城堡游戏解读

    这是我自己对城堡游戏的解读,解读后自己才不会囫囵吞枣地假装自己懂了. 城堡游戏是一个根据目前所处的房间与方向,来指明下一步所处位置与出口的小游戏. 翁恺老师讲课的精妙之处在于,从最简单也最缺乏设计感的 ...

  5. C语言程序设计笔记(浙大翁恺版) 第九周:指针

    按照中国大学MOOC上浙江大学翁恺老师主讲的版本所作,B站上也有资源.原课程链接如下: https://www.icourse163.org/course/ZJU-9001 由于是大三抽空回头整理的, ...

  6. C语言程序设计笔记(浙大翁恺版) 第二周:计算

    按照中国大学MOOC上浙江大学翁恺老师主讲的版本所作,B站上也有资源.原课程链接如下: https://www.icourse163.org/course/ZJU-9001 由于是大三抽空回头整理的, ...

  7. 浙大翁恺pat练习题_PAT|中国大学MOOC-浙江大学翁恺-C语言程序设计习题集(更新中)...

    2-0. 整数四则运算 时间限制:400 ms 内存限制:65536 kB 代码长度限制:8000 B 判题程序:Standard 作者:乔林(清华大学) 本题要求编写程序,计算2个正整数的和.差.积 ...

  8. C语言程序设计笔记(浙大翁恺版) 第三周:判断

    按照中国大学MOOC上浙江大学翁恺老师主讲的版本所作,B站上也有资源.原课程链接如下: https://www.icourse163.org/course/ZJU-9001 由于是大三抽空回头整理的, ...

  9. C语言程序设计笔记(浙大翁恺版) 第八周:数组

    按照中国大学MOOC上浙江大学翁恺老师主讲的版本所作,B站上也有资源.原课程链接如下: https://www.icourse163.org/course/ZJU-9001 由于是大三抽空回头整理的, ...

  10. 浙江大学计算机学院 翁恺,“中文MOOC第一人”浙江大学教师翁恺获得百万大奖...

    浙江大学计算机科学与技术学院的一线教师翁恺因爱生重教.教学贡献突出,于3日获"浙江大学永平杰出教学贡献奖",奖金100万元. 近日浙大公布2018年永平奖评选结果,该校计算机科学与 ...

最新文章

  1. 浅谈本地文件包含利用
  2. java中memcached
  3. mysql-5.5.59安装_MySQL-5.5 安装
  4. JavaScript基础(一)基本认识
  5. sharepoint服务器安装已安装netframework4.5,仍提示未安装
  6. table取tr对象 vue_Vue笔记
  7. Jeecg入门篇,高手掠过
  8. 工作流的ReplicatorActivity
  9. 2018-11-13#Hive外表创建和加载数据
  10. mysql 原理 ~ 并行复制
  11. Java语音转文字功能
  12. ghost12备份linux,用GHOST对LINUX系统做备份(转)
  13. SpringBoot使用快递鸟进行电子面单的获取以及打印
  14. xml读取前面多一个?
  15. Ubuntu(linux)系统配置搭建代理服务器
  16. winform 图像处理
  17. SELECT TOP 100 PERCENT * 的含义
  18. 字节跳动后端开发实习生面试经验
  19. 雷达信号处理-雷达应用
  20. 学生Web开发人员练习:电影评论II

热门文章

  1. 卡牌大师怎么玩_LOL2020卡牌大师符文出装推荐_2020卡牌大师玩法攻略介绍_求知软件网...
  2. 写了一个文件传输软件
  3. PC博物馆(3) MITS Altair 8800
  4. 表情捕捉的指标/图像的无参考质量评价
  5. 2018全球智慧物流峰会,一起见证一个全新物流时代的到来!
  6. 据说是史上最全的互联网思维精髓总结,学习学习!
  7. C#使用MQTTnet的websocket加密方式(wss)实现MQTTClient
  8. 第三课 EPLAN软件建立项目
  9. 对初学者友好的Git和Github使用指南之介绍和安装篇
  10. JavaWeb笔记——JDBC