问题描述:在C\C++语言中是不是所有的动作都是由main引起的,来看下面的代码:
#include<iostream>
class A
{
public
:
A(){
printf("A construct function ");
}
~A(){
printf("A destruct function ");
}
};
A a
;
int main()
{
printf("main function starting.");
return 0;
}
输出结果是什么呢?是不是“main function starting.”呢?
结果与分析 首先main()函数只不过是提供了一个函数入口,在main()函数中的显示代码执行之前,会由编译器生成_main函数,其中会进行所有全局对象的构造以及初始化工作。简单来说静态变量、全局变量和全局对象来说的分配是早在main()函数之前完成的,所以C\C++中并非所有的动作都是由main()函数引起的。
同理在main()函数执行后,程序退出,这时候会对全局变量和全局对象进行销毁操作,所以在main()函数还会执行相应的代码。在上面的例子中,a的构造函数会先执行,在执行main,最后会调用a的析构函数。