函数在main之前或之后运行
  • C++中,全局对象的构造函数在main之前运行,析构函数在main之后运行。
  • 类静态变量的初始化在main之前,静态函数不行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Base
{
public:
Base()
{
std::cout<<"基类构造"<<endl;
}
~Base()
{
std::cout<<"基类析构"<<endl;
}
static int get()
{
std::cout<<"get()"<<endl;
return 55;
}
static int count;
}

// main.cpp
Base b;
// int Base::count = Base::get(); 错误,这里不能调静态函数
int main()
{
std::cout<<"main "<<endl;
return 0;
}

运行结果:

1
2
3
4
基类构造
get()
main
基类析构

gcc中使用attribute关键字,声明constructor和destructor函数:

1
2
3
4
5
6
7
__attribute__((constructor)) void before_main() { 
printf("before main\n");
}

__attribute__((destructor)) void after_main() {
printf("after main\n");
}