2012-04-19 119 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; 

注:宣佈在頭文件中的變量是一個壞主意(他們應該在源文件中聲明)。否則,你將最終得到多個聲明。