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(); }
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!