1.全局变量

全局变量无疑要在main函数开始前执行完成,但可细分为在编译时和在运行时初始化,即static initialization和dynamic initialization。

  •  static initialization

           静态初始化按照我的理解,是针对那些较为简单的,c++内部定义的数据结构,如int,double,bool及其数组结构的初始化。又可分为zero和const两种方式。

对于zero初始化,编译时编译器将其分配在.bss段,不占用rom空间;而const初始化,也就是我们指定了全局变量的初始值,编译器会将其分配在.data段,占用romon空间。

  •  dynamic initialization

           这种初始化针对的是需要调用构造函数才能完成的初始化。这种初始化会在main函数执行前由运行时库调用对应的代码进行初始化。

静态初始化先于动态初始化,这一点很好理解。静态初始化在编译时初始化,直接写进.bss和.data段,程序执行时直接加载,而动态初始化只能在运行时由运行时库调用相应构造函数

进行初始化。

2.类的静态成员

C++规定,const的静态成员可以直接在类内初始化,而非const的静态成员需要在类外声明以初始化。对于后一种情况,我们一般选择在类的实现文件中初始化。

至此,具体的初始化方式和上面所说的又是一致的,可在编译期间初始化,也可以在运行时初始化。

3.关于静态成员函数和静态成员变量的使用

    两者都可以通过类名+"::"的方式进行使用,此外,对于类的对象,指针或引用,也可以直接调用。但类的静态成员函数由于不含有this指针,只能引用其类的静态成员变量。

不过有一种技巧,可以给类的静态成员函数传递该类的指针、引用等作为形参,强行使用该类的对象。

转载于:https://www.cnblogs.com/fushi/p/7631359.html

关于C++全局变量和静态变量初始化的一些总结相关推荐

  1. 多线程中局部静态变量初始化的陷阱

    C++当中常常需要一个全局唯一的对象实例,这时候,我们就会想到单件模式.如何实现这一模式?全局变量当然是一个简单可行的方法,然而,这太丑陋.嗯,其实,丑陋倒也罢了,最严重的是它将引诱程序员滥用全局变量 ...

  2. 深入理解C语言系列之内存和地址的故事(虚拟内存分区、全局变量与静态变量、外部函数内部函数、选择性编译)

    文章目录 一.内存的分区 二.虚拟内存分区 三.变量作用域与静态变量 四.外部函数与内部函数 五.include与define选择性编译 一.内存的分区 1.内存分为:物理内存和虚拟内存. 物理内存︰ ...

  3. 全局变量和静态变量以及内存堆栈的关系

    在编写程序时,内存的控制是很重要的一部分.关于全局变量和局部变量,静态变量的关系如何?以及他们在内存在是存储于哪部分的?做个记录,以便往后查看. 1. 全局变量和静态变量 全局变量:又称外部变量,与之 ...

  4. python中静态变量的作用_小白必读文章之全局变量与静态变量

    全局变量与静态变量 static 声明的变量在C语言中有两方面的特征: 1.变量被放在程序的全局存储区中,这样在下一次调用的时候还可以保持原来的赋值.这一点是它与堆栈变量和堆变量的区别. 2.变量用s ...

  5. c++全局变量与静态变量

    概述: 全局变量和和由static修饰的静态变量都被储存在全局数据区.全局数据区的内存在程序运行时会被全部置'0'.这不同于局部变量,局部变量在栈上分配内存,但此块内存一般不为零,且编译器不会在局部变 ...

  6. java静态变量需要初始化吗_» Java静态变量初始化顺序浅谈

    Java 类初始化顺序在网上已经有很多文章了,这里不再谈那么多,仅仅谈下Java静态变量的初始化顺序,如果你是Java高手,并且自认为对这个顺序已经掌握到了炉火纯青的境界,请忽视这篇文章. 前天看了Y ...

  7. java 静态全局变量_静态变量static和全局变量global

    静态变量static , 全局变量global 静态变量 在java也叫类变量从名字可以看出它是属于某个类的而不是类的实例.它的关键字是static存储在静态存储区,当程序执行,类的代码被加载到内存, ...

  8. Java静态变量初始化时机

    静态变量初始化方式: 1.声明时初始化: 2.静态块中初始化: 测试: package com.skymr.learn; /*** 静态变量初始化顺序测试* @author skymr**/ publ ...

  9. smali语言详解之static静态代码块的声明与静态变量初始化赋值位置

    smali语言详解之static静态代码块的声明与静态变量初始化赋值位置 一.smali语言的静态代码块声明格式 .method static constructor <clinit>() ...

最新文章

  1. 项目: 用c++写一个养成类的游戏【QQ宠物】
  2. goroutine sync.RWMutex读写锁RLock的使用
  3. 【HTTPS、HTTP】网易新闻首页https跨协议调用http的问题
  4. 如何解决push commit conflict
  5. Docker小白到实战之Docker网络简单了解一下
  6. Python turtle库绘制奥运五环
  7. Qt基础-QTreeView简单demo、视图模型、坐标位置对应关系介绍等
  8. 使用python进行数学建模系列1 读表格 +简单处理+ 画图简单入门 代码可直接运行
  9. C++ 引用与SqList L、SqList *L、SqList L辨析
  10. Trying to create too many scroll contexts. Must be less than or equal to: [20000]
  11. Qt中QListView设置其编辑状态
  12. 买二手苹果macbook被骗真实经历
  13. ubuntu系统中webpy的使用
  14. Linux文件系统及文件储存方式
  15. jsp70786体育馆售票门票系统
  16. Android Studio Template模板 制作模板
  17. 电脑D:/盘中突然出现elua,install,VC_RED等文件的问题
  18. CloseableHttpClient方式配置代理服务器访问外网
  19. 适用于Windows/Mac的最好视频剪辑软件
  20. 万能LUT调色PR预设包

热门文章

  1. 基于Minio和Thumbor搭建独立图片服务
  2. PPTP-***第三章——用户流量与并发数限制
  3. Oracle delete input与delete all input
  4. [转]C#和C++结构体Socket通信
  5. IncrediBuild 加速原理
  6. 修改windows XP/2000/2003用缩略图方式浏览图片时的默认尺寸
  7. OpenCV2.2的编译及其使用
  8. 利用socket转发和反弹端口技术突破防火墙进入内
  9. alsa的动态库安装在哪里_linux 给运行程序指定动态库路径
  10. 语言孪生素数问题_刘建亚教授讲述“素数的故事”