/ / Zachowanie stałych statycznych i zmiennych const w globalnych i klasowych w C ++ [duplikaty] - c ++, c ++ 11

Zachowanie stałych statycznych i zmiennych const w globalnych i klasowych w C ++ [duplikaty] - c ++, c ++ 11

// W 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

Jaka jest różnica między zmienną statyczną Const & Const?

A jeśli same zmienne są zadeklarowane w klasie.

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
}

Chcę ustawić wartość w czasie wykonywania jako COS_MAX = getCosMaxFromFile() a po tym nie powinno się go zmieniać, więc zrobiłem to Const .

Odpowiedzi:

2 dla odpowiedzi № 1

Po pierwsze, jeśli zadeklarujesz coś jako const oznacza to, że nie możesz go zmienić. Więc nie można jej przypisać w czasie wykonywania, ale możesz wywołać swoją funkcję podczas inicjowania:

static const int COS_MAX = getCosMaxFromFile();

Teraz różnica między static i niestatic zmienne, to zależy od gdzie zmienna jest zdefiniowana: jeśli jest zdefiniowana w zasięgu globalnym pliku lub zasięgu lokalnym funkcji.Jeśli jest to zasięg globalny pliku, static zmienne są dostępne tylko w bieżącym jednostka tłumaczeniowa (tj. tylko w tym pliku źródłowym). Jeśli jest to zmienna lokalna funkcji, to a static zmienna nie utraci swojej wartości między wywołaniami jak inne (niestatyczne) zmienne lokalne.

Kiedy masz globalny static zmienna zdefiniowana w pliku nagłówkowym, co oznaczaże każdy plik źródłowy, który zawiera plik nagłówkowy, będzie miał zdefiniowaną tę zmienną. Nie spowoduje to jednak błędów linkera, ponieważ zmienna nie jest widoczna na zewnątrz każdej jednostki tłumaczeniowej.