.static void _CALLTYPE4 _initterm (
.#else /* _M_MPPC */ .void _CALLTYPE4 _initterm (
.#endif /* _M_MPPC */ .{
for ( ;pfbegin < pfend ; pfbegin++)
if ( *pfbegin != NULL && *pfbegin != (PFV) -1 )
.}
静态变量进行初始化顺序是基类的静态变量先初始化,然后是它的派生类。直到所有的静态变量都被初始化。这里需要注意全局变量和静态变量的初始化是不分次序的。这也不难理解,其实静态变量和全局变量都被放在公共内存区。可以把静态变量理解为带有“作用域”的全局变量。在一切初始化工作结束后,main函数会被调用,如果某个类的构造函数被执行,那么首先基类的成员变量会被初始化。
要请注意的是,成员变量的初始化次序只与定义成员变量的顺序有关,与构造函数中初始化列表的顺序无关。因为成员变量的初始化次序是根据变量在内存中次序有关,而内存中的排列顺序早在编译期就根据变量的定义次序决定了。这点在EffectiveC++中有详细介绍。
联系客服