Heim > Backend-Entwicklung > C++ > Wie funktioniert der Umfang einer Inline-Friend-Funktion in C tatsächlich?

Wie funktioniert der Umfang einer Inline-Friend-Funktion in C tatsächlich?

Barbara Streisand
Freigeben: 2024-11-25 02:13:21
Original
584 Leute haben es durchsucht

How Does the Scope of an Inline Friend Function in C   Actually Work?

Geltungsbereich von Inline-Friend-Funktionen

Im Kontext von C erstreckt sich der lexikalische Geltungsbereich einer Inline-Friend-Funktion auf die Klasse, in der sie definiert ist. Die Bestimmung ihres tatsächlichen Geltungsbereichs erfordert jedoch weitere Untersuchungen.

Der ISO-C-Standard legt fest, dass eine Inline-Friend-Funktion, wenn sie innerhalb einer Klasse mit Namensraumbereich deklariert wird, eine Funktion im nächstgelegenen umschließenden Namensraumbereich benennt. Wenn die Funktion noch nicht deklariert wurde, macht die Friend-Deklaration allein sie in diesem Bereich für eine unqualifizierte Suche nicht sichtbar.

Stattdessen ermöglicht die Friend-Deklaration den Zugriff auf die Funktion über eine argumentabhängige Suche (ADL). ). Dies bedeutet, dass die Friend-Funktion unter Verwendung ihres unqualifizierten Namens aufgerufen werden kann, solange die Funktionsargumente Typen haben, die mit dem Namespace-Bereich übereinstimmen, der die Funktionsdeklaration enthält.

Daher können in Klassen deklarierte Inline-Friend-Funktionen nur über aufgerufen werden ADL, es sei denn, sie werden anschließend in ihrem umschließenden Namespace-Bereich deklariert oder definiert. Dadurch wird sichergestellt, dass auf die Funktion nur dann zugegriffen werden kann, wenn die Argumente eine eindeutige Namensauflösung zulassen.

Der folgende Codeausschnitt veranschaulicht dieses Verhalten:

namespace foo {
  struct bar {
    friend void baz();
  };
}

// Compilation error in main: 'baz' is not accessible through unqualified lookup
int main() {
  foo::baz();
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie funktioniert der Umfang einer Inline-Friend-Funktion in C tatsächlich?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage