Heim > Backend-Entwicklung > C++ > Wie funktionieren Umfang und Zugänglichkeit von Inline-Friend-Funktionen in C?

Wie funktionieren Umfang und Zugänglichkeit von Inline-Friend-Funktionen in C?

DDD
Freigeben: 2024-12-16 20:44:10
Original
438 Leute haben es durchsucht

How Does the Scope and Accessibility of Inline Friend Functions Work in C  ?

Inline-Friend-Funktionen: Umfang und Zugänglichkeit

Beim Definieren einer Inline-Friend-Funktion in einer Klasse wird ihr Umfang hauptsächlich durch die nächstgelegene Einschließung beeinflusst Namensraum. Die Friend-Deklaration führt einen Funktionsnamen in den Namespace ein, macht die Funktion jedoch nicht sofort für die reguläre Suche innerhalb dieses Bereichs sichtbar.

Gemäß dem C-Standard (ISO/IEC 14882:2011) gilt: „Wenn a Die Friend-Deklaration in einer nicht lokalen Klasse deklariert zunächst eine Klasse oder Funktion. Die Friend-Klasse oder -Funktion ist Mitglied des innersten umschließenden Namespace. Dies bedeutet, dass der Name der Friend-Funktion zunächst nicht durch unqualifizierte oder qualifizierte Suche innerhalb des Namespace-Bereichs gefunden wird.

Nur ​​wenn eine passende Deklaration im Namespace-Bereich selbst bereitgestellt wird, entweder vor oder nach der Klassendefinition Gewährt Freundschaft, wird die Funktion durch uneingeschränktes Nachschlagen sichtbar. Darüber hinaus kann die Friend-Funktion weiterhin über eine argumentabhängige Suche aufgerufen werden, die Funktionen aus Namespaces und Klassen berücksichtigt, die den Argumenttypen zugeordnet sind.

Der in der Frage bereitgestellte Code definiert beispielsweise eine Inline-Friend-Funktion namens baz in der bar-Klasse innerhalb des foo-Namespace. Versuche, baz aus verschiedenen Bereichen innerhalb des Programms aufzurufen, führen jedoch zu Fehlern, da die Funktion bei der regulären Suche nicht sichtbar ist:

  • foo::baz() schlägt fehl, weil baz kein Mitglied von foo ist namespace.
  • foo::bar::baz() schlägt fehl, weil baz kein Mitglied der Bar ist Klasse.
  • foo::bar::call_friend() schlägt fehl, weil baz nicht im Rahmen der Mitgliedsfunktion call_friend deklariert wurde.

Daher sind Inline-Friend-Funktionen nur eingeschränkt zugänglich und Umfang. Sie sind vor allem für ihre Fähigkeit bekannt, auf private und geschützte Mitglieder einer Klasse zuzugreifen, ohne den Klassennamen als Qualifikationsmerkmal anzugeben. Ihre Sichtbarkeit innerhalb des umgebenden Bereichs ist jedoch eingeschränkt, bis eine passende Deklaration im Namespace oder durch eine argumentabhängige Suche bereitgestellt wird.

Das obige ist der detaillierte Inhalt vonWie funktionieren Umfang und Zugänglichkeit von Inline-Friend-Funktionen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage