Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C++ Speicherklassen: Scope, Lifetime & Verwendung

Speicherklasse definiert Scope (Sichtbarkeit) und Lifetime (Lebensdauer) von Variablen/Funktionen. Diese Spezifizierer stehen vor dem Typ, den sie modifizieren. Folgende Speicherklassen gibt es in C++:

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

  1. C++-Operatoren meistern: Ein vollständiger Leitfaden mit praktischen Beispielen
  2. C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
  3. C++ Friend-Funktionen und Friend-Klassen: Zugriffskontrolle meistern
  4. C++ Klassentemplates meistern: Ein praktischer Leitfaden
  5. C Speicherklassen verstehen: Gültigkeitsbereich, Lebensdauer und Performance
  6. C-Speicherklassen verstehen: Gültigkeitsbereich, Lebensdauer & Verwendung
  7. Polymorphie in C++: Praktischer Leitfaden
  8. Datenabstraktion in C++: Interface-Implementierung-Trennung
  9. Datenkapselung in C++: Code schützen & strukturieren
  10. C++ Interfaces: Abstrakte Klassen & Pure Virtual Functions