Zusammenfassung der C++ Gültigkeitsbereichsregeln

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Gültigkeitsbereich in C++ - Index

Die folgenden Regeln betreffen alle Namen, einschließlich der typedef- und Klassennamen, vorausgesetzt, dass C++ derartige Namen im jeweiligen Zusammenhang erlaubt:

  • Der Name selbst wird auf Mehrdeutigkeit hin überprüft. Werden keine Mehrdeutigkeiten innerhalb des Gültigkeitsbereichs festgestellt, wird die Zugriffssequenz eingeleitet.
  • Wenn kein Zugriffsfehler auftritt, wird der Typ des Objekts, der Funktion, der Klasse, von typedef usw. überprüft.
  • Wird der Name außerhalb einer Funktion und Klasse verwendet, oder steht der unäre Gültigkeitsbereichszugriffsoperatorr :: davor, und der Name ist nicht vom Binäroperator :: oder den Elementauswahloperatoren . und ->qualifiziert worden, muss der Name ein globales Objekt, eine Funktion oder eine Aufzählung sein.
  • Erscheint der Name n in der Form X::n, x.n (wobei x eine Instanz von X oder eine Referenz auf X ist) oder ptr–>n (wobei ptr ein Zeiger auf X ist), dann ist n der Name für ein Element von X oder ein Element einer Basisklasse von X.
  • Jeder Name, auf den die bisherigen Beschreibungen nicht zutreffen und der in einer statischen Elementfunktion verwendet wird, muss in dem Block, in den er gehört, oder in einem einschließenden Block deklariert werden, oder er muss ein globaler Name sein. Die Deklaration eines lokalen Namens n verbirgt Deklarationen von n in einschließenden Blöcken und in globalen Deklarationen von n. Namen in unterschiedlichen Gültigkeitsbereichen werden nicht überladen.
  • Jeder Name, auf den die bisherigen Beschreibungen nicht zutreffen und der in einer nicht-statischen Elementfunktion der Klasse X verwendet wird, muss in dem Block, in den er gehört, oder in einem einschließenden Block deklariert werden, oder er muss ein Element der Klasse X bzw. einer Basisklasse von X oder ein globaler Name sein. Die Deklaration eines lokalen Namens n verbirgt Deklarationen von n in einschließenden Blöcken, in Elementfunktionen der Klasse und in globalen Deklarationen von n. Die Deklaration eines Elementnamens verbirgt Deklarationen mit demselben Namen in Basisklassen.
  • Der Name eines Funktionsarguments in einer Funktionsdefinition liegt im Gültigkeitsbereich des äußersten Blocks der Funktion. Der Name eines Funktionsarguments in einer nicht-definierenden Funktionsdeklaration hat überhaupt keinen Gültigkeitsbereich. Der Gültigkeitsbereich eines Standardarguments wird durch seinen Deklarationspunkt festgelegt, Ausdrücke für den Standardwert können jedoch nicht auf lokale Variablen oder auf nicht-statische Klassenelemente zugreifen. Standardargumente werden an jeder Aufrufposition ausgewertet.
  • Ein Konstruktor-Initialisierer wird im Gültigkeitsbereich des äußersten Blocks des Konstruktors ausgewertet, so dass er sich auf den Namen der Konstruktorargumente beziehen kann.

Siehe auch