私はグローバル変数でいっぱいのヘッダーファイルを持っています。条件演算子グローバル変数をグローバルスコープで初期化する唯一の方法は?
extern double event::m_chance = 0.01;
これまで何も特別:ここ は(.cppファイル内)のような実装がどのように見えるかの例です。しかし、私のコードが複雑になると、私はテスト目的のために#define MASTER_MODE
を実装し始めました。 は、だから今、それは次のようになります。
extern double event::m_chance = MASTER_MODE ? 0.5 : 0.01;
と私は自分自身に尋ねた:これは(条件付き)グローバルスコープでグローバル変数を初期化する唯一の方法ですか? if文がここでは機能しないので...それは正しくなければなりません。
//declarations
extern double event::m_chance;
if (MASTER_MODE) { //Error: excepted a declaration
event::m_chance = 0.5;
//other variables should be here
}
else { //nope
event::m_chance = 0.01;
//other variables should be here
}
これは他の人が私の立場でやっていることだと私は尋ねます。または、が好きなようになります(追加機能の作成など)。(標準-defined)です。
ご協力いただきありがとうございます。
私はあなたの最初の例では、あなたがそうであるように同じことをするだろう。しかし、変数を変更したり、コードの構造を変更したりする場合は、デフォルト値 '0.01'とdo(MASTER_MODE){event :: m_chance = 0.5;}をいつでも割り当てることができます。しかしこれは、プリプロセッサではなく実行時に変数を変更します – meetaig
いいえ、それは唯一の方法ではありません。テンプレート特殊化(C++の全バージョン)または(C++ 11以降) 'constexpr'関数、ラムダなどのオプションがあります。 – Peter
関連:http://stackoverflow.com/questions/16354575/whys-initializing-関数の戻り値がグローバル変数である場合 – Lanting