Clasa de stocare C ++: locală, globală, statică, înregistrare și subiect local

În acest articol, veți afla despre diferite clase de stocare în C ++. Și anume: local, global, static local, register și thread local.

Fiecare variabilă din C ++ are două caracteristici: tip și clasă de stocare.

Tipul specifică tipul de date care pot fi stocate într-o variabilă. De exemplu: int, float, charetc.

Și, clasa de stocare controlează două proprietăți diferite ale unei variabile: durata de viață (determină cât timp poate exista o variabilă) și domeniul de aplicare (determină ce parte a programului o poate accesa).

În funcție de clasa de stocare a unei variabile, aceasta poate fi împărțită în 4 tipuri majore:

  • Variabilă locală
  • Variabilă globală
  • Variabilă locală statică
  • Variabilă de înregistrare
  • Thread Local Storage

Variabilă locală

O variabilă definită în interiorul unei funcții (definită în interiorul corpului funcției între acolade) se numește variabilă locală sau variabilă automată.

Domeniul său de aplicare este limitat doar la funcția în care este definit. În termeni simpli, variabila locală există și poate fi accesată numai în interiorul unei funcții.

Viața unei variabile locale se termină (este distrusă) când funcția iese.

Exemplul 1: Variabilă locală

 #include using namespace std; void test(); int main() ( // local variable to main() int var = 5; test(); // illegal: var1 not declared inside main() var1 = 9; ) void test() ( // local variable to test() int var1; var1 = 6; // illegal: var not declared inside test() cout << var; )

Variabila var nu poate fi utilizată în interior test()și var1 nu poate fi utilizată în interiorul main()funcției.

Cuvântul cheie a autofost folosit și pentru definirea variabilelor locale înainte ca:auto int var;

Dar, după C ++ 11 autoare un alt sens și nu ar trebui folosit pentru definirea variabilelor locale.

Variabilă globală

Dacă o variabilă este definită în afara tuturor funcțiilor, atunci se numește variabilă globală.

Scopul unei variabile globale este întregul program. Aceasta înseamnă că poate fi folosit și schimbat în orice parte a programului după declarația sa.

La fel, viața sa se termină numai când se termină programul.

Exemplul 2: variabilă globală

 #include using namespace std; // Global variable declaration int c = 12; void test(); int main() ( ++c; // Outputs 13 cout << c < 

Output

 13 14

In the above program, c is a global variable.

This variable is visible to both functions main() and test() in the above program.

Static Local variable

Keyword static is used for specifying a static variable. For example:

… int main() ( static float a;… ) 

A static local variable exists only inside a function where it is declared (similar to a local variable) but its lifetime starts when the function is called and ends only when the program ends.

The main difference between local variable and static variable is that, the value of static variable persists the end of the program.

Example 3: Static local variable

 #include using namespace std; void test() ( // var is a static variable static int var = 0; ++var; cout << var << endl; ) int main() ( test(); test(); return 0; )

Output

 1 2

In the above program, test() function is invoked 2 times.

During the first call, variable var is declared as static variable and initialized to 0. Then 1 is added to var which is displayed in the screen.

When the function test() returns, variable var still exists because it is a static variable.

During second function call, no new variable var is created. The same var is increased by 1 and then displayed to the screen.

Output of above program if var was not specified as static variable

 1 1

Register Variable (Deprecated in C++11)

Keyword register is used for specifying register variables.

Register variables are similar to automatic variables and exists inside a particular function only. It is supposed to be faster than the local variables.

If a program encounters a register variable, it stores the variable in processor's register rather than memory if available. This makes it faster than the local variables.

However, this keyword was deprecated in C++11 and should not be used.

Thread Local Storage

Thread-local storage is a mechanism by which variables are allocated such that there is one instance of the variable per extant thread.

Keyword thread_local is used for this purpose.

Learn more about thread local storage.

Articole interesante...