码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-10-06 13:01:00      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:开始   完成   数组   文件中   全局   成员变量   data   span   技巧   

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指针,只能引用其类的静态成员变量。

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

 

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

标签:开始   完成   数组   文件中   全局   成员变量   data   span   技巧   

原文地址:http://www.cnblogs.com/fushi/p/7631359.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!