您的位置:首页 > 大数据 > 人工智能

在main()之前执行

2010-11-16 22:15 176 查看
对于c++来说规定:全局类型的数据会在进入主函数(main())之前就已经被分配地址和赋值了。并且一个全局变量会在main之前调用其构造函数(对于int等基本类型也可以看成是由构造函数的),然后再main之后再调用析构函数。正如下面的例子:

#include <iostream>

using namespace std;

class stud

{

public:

  stud(int a)

  {num=a;

  cout<<"全局变量会在main()之前构造"<<endl; 

  }

  ~stud()

  {

  cout<<"全局变量也会在main()之后自动调用析构函数"<<endl;

  }

private:

  int num;

  static stud self;

};

stud stud1(10);

int main()

{

  cout<<"这是main()"<<endl;

  return 0;

}

输出结果:

D:/>test.exe

全局变量会在main()之前构造

这是main()

全局变量也会在main()之后自动调用析构函数

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

另外值得一提的是类stud的成员:static stud self;

要注意:如果改成stud self;的话会编译错误,因为你不知不觉得来了个“递归定义”,并且这个递归却没有一个出口,所以会出错。

加上一个static就不一样了,我认为应该是静态变量是属于整个类的,而编译器对此的实现是采用的指针,来指向该类的在内存中静态区域,而指针可是一个已知的类型(x86里面占4B),所以不会出现错误;由此可知也可以改成stud *self;不会出错。

对于这些比较另类的c++知识推荐看一下《c++必知必会》,挺有收获的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编译器 x86 c