/ / C ++における静的ConstおよびConst変数のグローバルおよびクラスでの動作[duplicate] - c ++、c ++ 11

C ++での静的ConstおよびConst変数のグローバルおよびクラスでの動作[duplicate] - c ++、c ++ 11

// Globals.hppで

const int SINE_MIN = 0;    // only CONSTANT
const int SINE_MAX = 1;    // only CONSTANT

static const int COS_MIN = 1;   // STATIC CONSTANT
static const int COS_MAX = 0;   // STATIC CONSTANT

静的定数と静的変数の違いは何ですか?

同じ変数がクラス内で宣言されている場合。

class SomeClass
{
const int SINE_MIN = 0;    // only CONSTANT
const int SINE_MAX = 1;    // only CONSTANT

static const int COS_MIN = 1;   // STATIC CONSTANT
static const int COS_MAX = 0;   // STATIC CONSTAN
}

実行時に値を次のように設定したい COS_MAX = getCosMaxFromFile() それ以降は変更しないでください Const .

回答:

回答№1は2

まず、あなたが何かを宣言すれば const それはあなたがそれを変更することができないことを意味します。だからあなたは実行時にそれに割り当てることはできませんが、初期化であなたの関数を呼び出すことはできます:

static const int COS_MAX = getCosMaxFromFile();

今度は static また、static 変数、それは依存する どこで 変数が定義されている:ファイルグローバルスコープまたは関数ローカルスコープで定義されているかどうか。ファイルグローバルスコープであれば static 変数は現在のバージョンでのみ使用可能です 翻訳単位 (つまり、そのソースファイル内のみ)。それが関数ローカル変数であれば、a static 変数は他の(静的でない)ローカル変数のような呼び出し間でその値を緩和しません。

あなたはグローバル static ヘッダファイルに定義された変数ヘッダーファイルを含むすべてのソースファイルにはその変数が定義されます。変数が各翻訳単位の外側に見えないので、リンカーのエラーを引き起こしませんでした。