2012-04-19 17 views
0

Test1.hとTest2.hという2つのヘッダーファイルがある場合は、Test1とTest2のクラスをそれぞれ定義し、それらのクラスの2つのオブジェクトをmainに含まれるヘッダーファイルにインスタンス化します。 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」はヘッダー内のオブジェクトの定義を指します。ヘッダーを最初に配置する目的を基本的に破棄します(複数のソースファイルにヘッダーを含めると、定義されていない動作が複数発生する)。 –

答えて

6

それらは同じコンパイル単位(main.cppに)

の両方したがって、それらが宣言の順序であることが保証されるからです。
ヘッダーファイルを特定の順序(変数が何らかの理由で宣言されている場所)に含めるためです。

このように順序は次のとおりです。

Test1 test1; 
Test2 test2; 

注:ヘッダファイルで宣言した変数(彼らは、ソースファイル内で宣言されなければならない)悪い考えです。さもなければ、複数の宣言で終わるつもりです。

関連する問題