static变量在Main函数之前执行

转载 2015年07月06日 17:11:46

一、例1

c/c++语言中,在执行main的入口函数之前,是会首先执行一段代码。

而对于全局变量和static的初始化就是 在main函数之前执行的,例子如下:

  1. #include <iostrem.h>  
  2.   
  3. #include  <stdio.h>  
  4.   
  5. class static_name  
  6.   
  7. {  
  8.   
  9. public:  
  10.   
  11.     static_name(){};  
  12.   
  13.     static int  static_print();  
  14.   
  15. private:  
  16.   
  17.     static  int  i_static_value;  
  18.   
  19. };  
  20.   
  21. int static_name:static_print()  
  22.   
  23. {  
  24.   
  25.     printf("This is static!!\n");  
  26.   
  27.     return 1;  
  28.   
  29. }  
  30.   
  31. int static_name::i_static_value=static_name::static_print();  
  32.   
  33. int main()  
  34.   
  35. {  
  36.   
  37.     printf("This is main_function()!!\n");  
  38.   
  39.     return 0;  
  40.   
  41. }  



执行结果为:

  1. This is static!!  
  2.   
  3. This is main_function()!!  


这就说明:

1.类中static变量是可以不在构造函数中初始化的,可以在类外面单独初始化。

2.static变量初始化执行,是在main入口函数之前就完成的操作。


【转自:http://blog.csdn.net/zhghost/article/details/8693494】


再看例2:


二、例2

  1. #include <boost/serialization/singleton.hpp>  
  2. using namespace std;  
  3. using boost::serialization::singleton;  
  4.   
  5. class Point  
  6. {  
  7. public:  
  8.     explicit Point(int a=0, int b=0, int c=0):x(a),y(b),z(c)  
  9.     {  
  10.         cout<<"point ctor"<<endl;  
  11.     }  
  12.     ~Point()  
  13.     {  
  14.         cout<<"point dtor"<<endl;  
  15.     }  
  16.     void Print()const  
  17.     {  
  18.         cout<<"x="<<x<<", y="<<y<<", z="<<z<<endl;  
  19.     }  
  20. private:  
  21.     int x, y, z;  
  22. };  
  23.   
  24. int main ( )  
  25. {  
  26.     cout<<"main() start"<<endl;  
  27.     typedef singleton<Point> origin;  
  28.   
  29.     origin::get_const_instance().Print();  
  30.       
  31.     cout<<"main() finish"<<endl;  
  32.   
  33.     return 0;  
  34. }  

执行结果为:

  1. <span style="color:#ff0000;">point ctor</span>  
  2. main() start  
  3. x=0, y=0, z=0  
  4. main() finish  
  5. point dtor  

gstreamer中的rtpjitterbuffer代码分析:推送线程

本文主要分析gstreamer中的rtpjitterbuffer中推送数据线程的代码。

什么会在main函数之前执行

1、可以定义一个全局对象,这时会调用该类的构造函数。 #include #include using namespace std; class A { public: A() { ...

Linux内核设计的艺术-从开机加电到执行main函数之前的过程

我们假定本书所用的计算机是基于 IA—32 系列 CPU, 安装了标准单色显示器、 标准键 盘、一个软驱、一块硬盘、16 MB 内存,在内存中开辟了 2 MB 内存作为虚拟盘,并在 BIOS 中设置软...
  • jltxgcy
  • jltxgcy
  • 2014年02月17日 12:40
  • 1499

main函数之前执行代码

main函数之前执行代码  有的时候,需要会遇到这样的一个情况,“想要在main或者WinMain函数执行前初始化我们的系统框架,和在之后释放我们的系统框架”, 如果这样,我们该怎么做呢?笔者今天放...

从开机加电到执行main函数之前的过程

分三步完成: 1.启动BIOS,准备实模式下的中断向量表和中断服务程序 2.从启动盘加载操作系统程序到内存,加载操作系统程序的工作是利用第一步中准备的中断服务程序实现的 3.为执行32位的mai...

《Linux内核设计的艺术》学习笔记(一)从开机加电到执行main函数之前的过程

分享一个最近丢了手机心塞到爆炸的我,现在穷的只剩下满脑子的智慧了,好了,我要开始学习了. 首先,搭建一个linux0.11的系统环境,贴出结果图. 从开机加电到执行main函数之前的过程. 1....
  • kidck
  • kidck
  • 2016年05月07日 14:57
  • 2917

面试题:C++中如何在main()函数之前执行操作?

面试题:C++中如何在main()函数之前执行操作?            第一反应main()函数是所有函数执行的开始。但是问题是main()函数执行之前如何执行呢?            联想...

多玩YY语音的面试题:C++中如何在main()函数之前执行操作?

多玩YY语音的面试题:C++中如何在main()函数之前执行操作?            第一反应main()函数是所有函数执行的开始。但是问题是main()函数执行之前如何执行呢?         ...

第一章 从开机加电到执行main函数之前的过程 0000节

从按下电源键到执行main函数之前
  • lzuwds
  • lzuwds
  • 2014年05月19日 14:44
  • 597

从开机加电到执行main函数之前的过程(二)

下面我们来说一下从开机到main()的执行过程中的第二步--加载操作系统内核程序并为保护模式做准备。      在Linux-0.11源码中,有一个文件夹boot,其中存放了三个汇编文件,分别是bo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:static变量在Main函数之前执行
举报原因:
原因补充:

(最多只允许输入30个字)