1、为什么设计static?考虑下面的需求:

  在程序运行过程中,在一个范围内,有一个对象大家共享,而且可以多次使用,状态能够保持,对象的生命周期一直持续到程序运行结束。

2、静态对象要分配在全局数据区,程序运行期间,不能释放,一直到程序终止。

3、静态对象的生命周期是程序的整个运行过程。但是可以限定静态对象的作用域,根据作用域的大小,可分为静态局部对象,静态全局对象。静态局部对象是指方法内的静态对象,静态全局对象是指编译单元里的静态对象。(注意:生命周期是时间概念,作用域是空间概念)

4、静态对象只能初始化一次。严格来讲,任何对象都只能初始化一次,而且是在定义的时候。后面再想修改对象的值,只能通过赋值操作。什么叫初始化,什么叫赋值?初始化是指创建对象的时候(也就是定义的时候),给对象设置初始值。赋值是指对象已经存在值了,擦除当前值,使用新值代替。任何对象都只创建一次,也就是初始化一次。

5、那为什么方法内的局部对象可以初始化多次呢?

  实际上,方法内的对象也只是初始化一次。第一次调用方法,初始化对象,方法退出,对象销毁。第二次调用方法,又初始化对象,但是,这时的对象不是第一次调用时的对象,而且没有任何关系。

6、C++可以声明多次,只能定义一次,但是有一些例外。static就是一例,static可以在多个编译单元里定义,这是因为static是内部链接。全局static的作用域是当前的编译单元。不同编译单元都有专属于自己的一份static对象,而且彼此没有关系,不会保持相同的值。

7、对于类,头文件是对类的定义,但是是对类的成员的声明。类中static成员,在类定义中声明,在类定义外,需要定义,也就是初始化。类中static成员的作用域是当前类,所有类对象共享。

8、声明:是说我有这个东西。

定义:创建这个东西,并初始化,说明这个东西就在这里。

9、基本类型对象:

  static对象,定义的时候,没有显示初始化,会被隐式初始化为0或者null,动态对象(方法内的对象,在栈上分配)定义的时候,没有显示初始化,可以认为隐式初始化为一个随机值。

理解C++ static的更多相关文章

  1. 正确理解静态Static关键字

    与其他语言不通,C#没有全局变量和全局函数的感念,C#的所有字段和方法都出现在一个类的上下文中,在C#中与全局字段或函数等价的就是静态字段或方法.“全局字段或方法”与“C#的静态字段或方法”没有功能上 ...

  2. 理解使用static import 机制(转)

    J2SE 1.5里引入了“Static Import”机制,借助这一机制,可以用略掉所在的类或接口名的方式,来使用静态成员.本文介绍这一机制的使用方法,以及使用过程中的注意事项. 在Java程序中,是 ...

  3. 理解使用static import 机制

    J2SE 1.5里引入了“Static Import”机制,借助这一机制,可以用略掉所在的类或接口名的方式,来使用静态成员.本文介绍这一机制的使用方法,以及使用过程中的注意事项. 在Java程序中,是 ...

  4. 关于java中Static关键字的加强理解

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

  5. Static关键字深入理解

    1.static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量. 两者的区别是: 对于静态变量在 ...

  6. java里的static和final

    本节介绍JAVA里static和final的作用和使用方法以及一些需要注意的问题. 一.static static表示"全局"或"静态",用来修饰成员变量和成员 ...

  7. C语言之Static

    1.全局静态变量 在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量. 1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在) 2)初始化:未经初始化的全局静态变量 ...

  8. C#线程池ThreadPool的理解

    在多线程编程中,线程的创建和销毁是非常消耗系统资源的,因此,C#引入了池的概念,类似的还有数据库连接池,这样,维护一个池,池内维护的一些线程,需要的时候从池中取出来,不需要的时候放回去,这样就避免了重 ...

  9. 浅谈static其一之不死变量

    在学习汇编的过程中,小有所悟,遂把自己所思所想记下,以便日后查阅. 首先说说我对这个关键字的理解.static字面上就是静止的.静态的.不变的之类的意思,所以在被它修饰之后,应该也会带有这样的一些特点 ...

随机推荐

  1. duilib List控件,横向滚动时列表项不移动或者显示错位的bug的修复

    转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42264673 关于这个bug的修复我之前写过一篇博客,连接为:http:/ ...

  2. [Asp.net MVC]Asp.net MVC5系列——Razor语法

    Razor视图引擎是Asp.net MVC3中新扩展的内容,并且也是它的默认视图引擎.还有另外一种Web Forms视图引擎.通过前面的文章可知在Asp.net mvc5中创建视图,默认使用的是Raz ...

  3. Python:映像、集合

    一.字典 字典(dictionary)是Python中唯一的“映射”类型,映射这个概念在高中就学过:一个函数f将键(key, 定义域)映射到值(value, 值域).这样的函数在字典中可以称为哈希(H ...

  4. CodeIgniter 3.0+ 部署linux环境 session报错

    codeigniter Message: mkdir(): Invalid path Filename: drivers/Session_files_driver.php 看起来像权限问题,在默认情况 ...

  5. html5 canvas图片渐变

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  6. dom cookie记录用户名

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 轻松学Shell之认识正规表达式

    离线下载观看:http://down.51cto.com/data/148117   650) this.width=650;" onclick='window.open("htt ...

  8. 通过用 .NET 生成自定义窗体设计器来定制应用程序

    通过用 .NET 生成自定义窗体设计器来定制应用程序 https://www.microsoft.com/china/MSDN/library/netFramework/netframework/Cu ...

  9. java.io.IOException: Messenger was closed

    程序运行一段时间后抛出异常java.io.IOException: Messenger was closed,不知道是啥原因? ———————————————————————————————————— ...

  10. python开发vim插件

    [python开发vim插件] 按如下方式使用python开发vim插件,注意调用时使用的是exec. 但在函数中嵌入python代码更为简便,如下: python如何传递参数给python: 代码头 ...