問題描述
在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的析構函數。