在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++必知必会》,挺有收获的。
#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++必知必会》,挺有收获的。
相关文章推荐
- 面试中那点超乎你想象的题目:C++中如何在main()函数之前执行操作?
- main之前执行
- 程序在执行用之前就崩溃了 , 用调试器单步跟进 , 在 main() 之前就 死了
- .net里怎样在Main方法之前执行代码
- C++中如何在main()函数之前执行操作?
- 一个c程序在执行main函数之前和main之后都做了那些事情啊
- 程序在执行用之前就崩溃了, 用调试器单步跟进, 在main() 之前就死了。
- C++中如何在main()函数之前执行操作?
- C/C++中如何在main()函数之前执行一条语句?
- 用 __attribute__ 将函数注册到.ctors段 使接口在main之前执行
- 1.4 如何在main()方法之前执行输出“hello world”
- 面试题:C++中如何在main()函数之前执行操作?
- C++中如何在main()函数之前执行操作
- 多玩YY语音的面试题:C++中如何在main()函数之前执行操作?
- C++中如何在main()函数之前执行操作?
- 那些年犯过的错:在main方法之前,到底执行了什么?
- .net里怎样在Main方法之前执行代码?
- main之前和之后(可)执行哪些函数(操作)
- C++能不能在main之前执行自己的函数--答案是可以的
- main之前会执行什么代码