Freigeben über


Gültigkeitsbereich

C++-Namen können nur in bestimmten Bereichen eines Programms verwendet werden. Dieser Bereich wird als Gültigkeitsbereich des Namens bezeichnet. Der Gültigkeitsbereich bestimmt die Lebensdauer eines Namens, der kein statisches Objekt angibt. Der Gültigkeitsbereich bestimmt außerdem die Sichtbarkeit eines Namens, wenn Klassenkonstruktoren und -destruktoren aufgerufen werden, und wenn lokale Gültigkeitsbereichsvariablen initialisiert werden. (Weitere Informationen finden Sie unter Konstruktoren und Destruktoren). Es gibt fünf Arten von Gültigkeitsbereichen:

  • **Lokaler Gültigkeitsbereich   **Auf einen Namen, der in einem Block deklariert wird, kann nur innerhalb dieses Blocks und den von diesem umschlossenen Blöcken und nur nach dem Zeitpunkt der Deklaration zugegriffen werden. Die Namen von formalen Argumenten für eine Funktion im Gültigkeitsbereich des äußersten Funktionsblocks haben lokale Gültigkeit, so als ob sie direkt im Block deklariert wurden, der den Funktionstext einschließt. Betrachten Sie das folgende Codefragment:

    {
        int i;
    }
    

    Da die Deklaration von i in einem Block ist, der von geschweiften Klammern eingeschlossen wird, hat i lokale Gültigkeit und ist nie zugänglich, weil kein Code vor der schließenden Klammer darauf zugreift.

  • **Funktionsgültigkeitsbereich   **Bezeichnungen sind die einzigen Namen, die einen Funktionsgültigkeitsbereich haben. Sie können überall innerhalb einer Funktion verwendet werden. Außerhalb der Funktion kann aber nicht auf sie zugegriffen werden.

  • **Dateigültigkeitsbereich   **Jeder Name, der außerhalb aller Blöcke oder Klassen deklariert wird, hat einen Dateigültigkeitsbereich. Auf ihn kann nach seiner Deklaration in der gesamten Übersetzungseinheit zugegriffen werden. Namen mit Dateigültigkeitsbereich, die keine statischen Objekte deklarieren, werden oft als globale Namen bezeichnet.

    In C++ ist der Dateigültigkeitsbereich auch als Namespacegültigkeitsbereich bekannt.

  • Klassengültigkeitsbereich   Namen von Klassenmembern haben einen Klassengültigkeitsbereich. Auf Klassenmemberfunktionen kann nur mithilfe der Memberauswahloperatoren (. oder –>) oder der Zeiger-auf-Member-Operatoren (.* oder –>*) für ein Objekt oder einen Zeiger auf ein Objekt dieser Klasse zugegriffen werden. Nicht statische Klassenmemberdaten werden für das Objekt dieser Klasse als lokal angesehen. Betrachten Sie die folgende Klassendeklaration:

    class Point
    {
        int x;
        int y;
    };
    

    Die Klassenmember x und y werden als im Gültigkeitsbereich der Klasse Point betrachtet.

  • **Prototypgültigkeitsbereich   **Namen, die in einem Funktionsprototyp deklariert werden, sind nur bis zum Ende des Prototyps sichtbar. Der folgende Prototyp deklariert drei Namen (strDestination, numberOfElements und strSource). Diese Namen verlassen am Ende des Prototyps den gültigen Bereich:

    errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );
    

Siehe auch

Referenz

Grundlegende Konzepte