C ++ Storage Class: Local, Global, Static, Register en Thread Local

In dit artikel leer je over verschillende opslagklassen in C ++. Namelijk: lokaal, globaal, statisch lokaal, register en thread lokaal.

Elke variabele in C ++ heeft twee kenmerken: type en opslagklasse.

Type specificeert het type gegevens dat in een variabele kan worden opgeslagen. Bijvoorbeeld: int, float, charetc.

En de opslagklasse bestuurt twee verschillende eigenschappen van een variabele: levensduur (bepaalt hoe lang een variabele kan bestaan) en bereik (bepaalt welk deel van het programma er toegang toe heeft).

Afhankelijk van de opslagklasse van een variabele, kan deze worden onderverdeeld in 4 hoofdtypen:

  • Lokale variabele
  • Globale variabele
  • Statische lokale variabele
  • Registreer variabele
  • Rijg lokale opslag in

Lokale variabele

Een variabele die binnen een functie is gedefinieerd (gedefinieerd in de hoofdtekst van de functie tussen accolades) wordt een lokale variabele of automatische variabele genoemd.

Het toepassingsgebied is alleen beperkt tot de functie waarin het is gedefinieerd. In eenvoudige bewoordingen bestaat de lokale variabele en is deze alleen toegankelijk binnen een functie.

De levensduur van een lokale variabele eindigt (deze wordt vernietigd) wanneer de functie wordt afgesloten.

Voorbeeld 1: lokale variabele

 #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; )

De variabele var kan niet binnen worden gebruikt test()en var1 kan niet binnen de main()functie worden gebruikt .

Sleutelwoord autowerd ook gebruikt voor het definiëren van lokale variabelen, zoals:auto int var;

Maar nadat C ++ 11 autoeen andere betekenis heeft en niet mag worden gebruikt voor het definiëren van lokale variabelen.

Globale variabele

Als een variabele buiten alle functies is gedefinieerd, wordt deze een globale variabele genoemd.

De scope van een globale variabele is het hele programma. Dit betekent dat het kan worden gebruikt en gewijzigd op elk deel van het programma nadat het is gedeclareerd.

Evenzo eindigt zijn leven pas als het programma eindigt.

Voorbeeld 2: Globale variabele

 #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.

Interessante artikelen...