问题描述
在C/C++语言执行过程中是不是所有的动作都由main()函数引起,来看下面的代码:
#include <iostream>
class A{
public:
A() {
printf("This is Constructor\n");
}
~A() {
printf("This is destructor\n");
}
};
A a;
int main() {
printf("This is main\n");
}
这段代码很简单,但是最终是不是只是打印了This is main这句话,显然不是,实际的结果是按照下面顺序的三句话:
This is Constructor
This is main
This is destructor
问题分析
首先main()函数只不过是提供了一个函数入口,在main()函数中的显示代码执行之前,会由编译器生成_main函数,其中会进行所有全局对象的构造以及初始化工作。简单来说对静态变量、全局变量和全局对象来说的分配是早在main()函数之前就完成的,所以C/C++中并非所有的动作都是由于main()函数引起的。
同理在main()函数执行后,程序退出,这时候会对全局变量和全局对象进行销毁操作,所以在main()函数还会执行相应的代码。
在上面的例子中,a的构造函数会先执行,再执行main,最后会调用a的析构函数。
本文探讨了C/C++中全局对象的构造与析构过程,并解释了这些操作如何独立于main()函数执行。通过一个示例程序详细说明了编译器自动生成的_main函数的作用。

622

被折叠的 条评论
为什么被折叠?



