C++ Speicherklassen: Scope, Lifetime & Verwendung
autoregisterstaticexternmutable
auto Speicherklasse
Standard für alle lokalen Variablen.
{ int mount; auto int month; }
Beide Variablen haben gleiche Speicherklasse. auto nur innerhalb von Funktionen (lokale Variablen) nutzbar.
register Speicherklasse
Definiert lokale Variablen, die in einem Register (statt RAM) gespeichert werden sollen. Maximale Größe = Registergröße (meist ein Wort). Unärer &-Operator nicht anwendbar (keine Speicheradresse).
{ register int miles; }
Nur für Variablen mit schnellem Zugriff (z. B. Zähler). register ist nur ein Hinweis – Compiler entscheidet basierend auf Hardware/Implementierung.
static Speicherklasse
Weist Compiler an, lokale Variable während der gesamten Programmlaufzeit beizubehalten (statt bei jedem Scope-Eintritt neu zu erstellen/zerstören). Ermöglicht Beibehaltung des Werts zwischen Funktionsaufrufen.
Auf globale Variablen angewendet: Scope auf die Datei beschränkt, in der sie deklariert ist.
In C++ auf Klassen-Datenmember angewendet: Nur eine Kopie wird von allen Objekten der Klasse geteilt.
Beispiel
#include <iostream>
void func(void);
static int count = 10; // globale Variable
int main() {
while(count--) func();
return 0;
}
void func(void) {
static int i = 5; // lokale static Variable
i++;
std::cout << "i is " << i;
std::cout << " and count is " << count << std::endl;
}
Ausgabe:
i is 6 and count is 9
i is 7 and count is 8
i is 8 and count is 7
i is 9 and count is 6
i is 10 and count is 5
i is 11 and count is 4
i is 12 and count is 3
i is 13 and count is 2
i is 14 and count is 1
i is 15 and count is 0
extern Speicherklasse
Gibt Referenz auf eine globale Variable, die in allen Programmdateien sichtbar ist. Bei extern keine Initialisierung möglich – zeigt nur auf zuvor definierten Speicherort.
Bei mehreren Dateien: globale Variable/Funktion in einer Datei definieren, in anderen mit extern referenzieren.
Datei 1: main.cpp
#include <iostream>
int count;
extern void write_extern();
int main() {
count = 5;
write_extern();
}
Datei 2: support.cpp
#include <iostream>
extern int count;
void write_extern(void) {
std::cout << "Count is " << count << std::endl;
}
Kompilieren: $ g++ main.cpp support.cpp -o write → Ausführung: $ ./write → Ausgabe: 5
mutable Speicherklasse
Gilt nur für Klassenobjekte (später im Tutorial). Erlaubt einem Member, const-Memberfunktionen zu überschreiben – ein mutable-Member kann von einer const-Memberfunktion modifiziert werden.
C Sprache
- C++-Operatoren meistern: Ein vollständiger Leitfaden mit praktischen Beispielen
- C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
- C++ Friend-Funktionen und Friend-Klassen: Zugriffskontrolle meistern
- C++ Klassentemplates meistern: Ein praktischer Leitfaden
- C Speicherklassen verstehen: Gültigkeitsbereich, Lebensdauer und Performance
- C-Speicherklassen verstehen: Gültigkeitsbereich, Lebensdauer & Verwendung
- Polymorphie in C++: Praktischer Leitfaden
- Datenabstraktion in C++: Interface-Implementierung-Trennung
- Datenkapselung in C++: Code schützen & strukturieren
- C++ Interfaces: Abstrakte Klassen & Pure Virtual Functions