2012-04-19 100 views
0

如果我有两个头文件Test1.h和Test2.h,我在其中分别定义了Test1和Test2类,并在头文件中实例化了这些类的2个对象,并将它们包含在main中。包含主函数的cpp(Test1.h和Test2.h)包含主函数,test1和test2对象将在哪个顺序中实例化?全局变量实例化的顺序

// Test1.h 

class Test1 
{ 

}; 

Test1 test1; 

// Test2.h 
class Test2 
{ 

}; 

Test2 test2; 

// main.cpp 

#include "Test1.h" 
#include "Test2.h" 

int main(int argc, const char * argv []) 
{ 
     return 0; 
} 
+0

真正的答案很简单:“不要那样做!”在这种情况下,“that”是指定义标题中的对象。它基本上破坏了将某些东西放在标题中的目的(即,如果将标题包含在多个源文件中,则会获得这些对象的多个定义,这会导致未定义的行为)。 – 2012-04-19 04:44:56

回答

6

因为它们都在

因此它们保证在声明的顺序相同的编译单元(main.cpp中)。
因为你以特定的顺序包含头文件(这是因为某种奇怪的原因而声明变量的地方)。

这样的顺序是:

Test1 test1; 
Test2 test2; 

注:宣布在头文件中的变量是一个坏主意(他们应该在源文件中声明)。否则,你将最终得到多个声明。