以下を考慮してください。エクスポートされたconst変数を参照するconst変数のなかで、値が0になるのはなぜですか?
// somefile.h
extern const double cMyConstDouble;
extern const double cMyConstDouble2;
とこれらの定数は現在2静的(ローカルに見える)の定数を定義するために、他のいくつかの場所を参照され
// somefile.cpp
const double cMyConstDouble = 3.14;
const double cMyConstDouble2 = 2.5*cMyConstDouble;
:
// someotherfile.cpp
#include "somefile.h"
static const double cAnotherDouble = 1.1*cMyConstDouble;
static const double cAnotherDouble2 = 1.1*cMyConstDouble2;
printf("cAnotherDouble = %g, cAnotherDouble2 = %g\n",
cAnotherDouble, cAnotherDouble2);
利回りを次のように私は2つのエクスポートされた定数を持っています次の出力:
cAnotherDouble = 3.454, cAnotherDouble2 = 0
なぜ2番目のdoubleは0ですか?私は.NET 2003 C++コンパイラ(13.10.3077)を使用しています。
@Suma: 'cMyConstDouble2'が' cMyConstDouble'が 'extern'のために定数フォールドされていない場合、' cAnotherDouble'と同じことは起こりませんか?これも 'cMyConstDouble'の権利に依存していますか? 3.454 – legends2k
モジュール間の初期化の順序は定義されていません。あるケースではすでに完了していて、2番目のケースではなかった。 – Suma