C++のconstについてです。
以下の1つのヘッダと、2つのcppがあるとします。
そして、2つのcppは、以下のヘッダファイルを
それぞれ、別途インクルードしているとします。
C++
1----- test.h ----- 2const int g_Test = 0; 3------------------ 4 5----- a.cpp ----- 6... 7#include "test.h" 8... 9void FuncA() 10{ 11 printf("g_Test = %d\n", g_Test); 12} 13... 14----------------- 15 16----- b.cpp ----- 17... 18#include "test.h" 19... 20void FuncB() 21{ 22 printf("g_Test = %d\n", g_Test); 23} 24... 25-----------------
この場合、C++においては、
const int g_Test = 0;
のように、constがついているものについては
内部結合として、扱われるかと思います。
ここで疑問があるのですが、g_Testは、
a.cppとb.cppで、それぞれインクルードされて
利用されていますが、
内部結合なので、a.cppとb.cppのそれぞれの中で、
別々に、変数の領域が確保されるような気がしました。
しかし、ネット上で検索しても、明確な記述は
今のところ見つかっておりません。
試しに、手元のVisualStuidio2008でいろいろと
調べていたのですが、以下ようにマクロを利用した場合の
mapファイルを比較してみたところ、
C++
1----- test.h ----- 2#define g_Test (0) 3------------------
mapファイルの中の.rdataや.bssが、const変数の場合も、
マクロの場合も同じでしたので、もしかしたら、
マクロと同等な扱いを受けているような気もしてきました。
ちなみに、constを外して
C++
1----- test.h ----- 2int g_Test = 0; 3------------------
とすると、グローバル変数になるので、
ビルドエラーが出るようです。
ということで、
const int g_Test = 0;
と書かれたファイルを、それぞれ別のcppで
インクルードした場合について、
変数領域の確保がどうなっているか?、
マクロと同等のものとして扱われるか?、
といった点についてご存知でしたら、ご教示頂けないでしょうか?
お手数をおかけいたしますがどうぞよろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/20 13:14
2016/05/20 13:35 編集
2016/05/21 04:56