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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C++全局变量和静态变量初始化的一些总结相关的知识,希望对你有一定的参考价值。

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++全局变量和静态变量初始化的一些总结的主要内容,如果未能解决你的问题,请参考以下文章

总结C++静态成员变量的特性总结及测试用例

C/C++:static用法总结

请问C++语言里静态变量和全局变量有啥区别?谢谢

c++ static 关键字总结

C++初级static用法总结问题探讨及常见错误排查

笔记:C++中static的作用总结