Zugriff auf Inline-Friend-Funktionen: Lexikalischer und tatsächlicher Geltungsbereich
Bei der Deklaration von Inline-Friend-Funktionen innerhalb einer Klasse ist es wichtig, nicht nur deren lexikalischen zu berücksichtigen sondern auch ihren tatsächlichen Umfang. Lexikalisch liegen solche Funktionen innerhalb der Klasse, in der sie definiert sind. Allerdings kann ihre tatsächliche Zugänglichkeit je nach Kontext eingeschränkt sein.
Gemäß dem C-Standard (ISO/IEC 14882:2011), wenn ein Freund Wenn eine Funktion mit einem unqualifizierten Bezeichner innerhalb einer Klasse deklariert wird, verweist sie auf eine Funktion im nächstgelegenen umschließenden Namespace-Bereich. Diese Friend-Deklaration macht diese Funktion jedoch nicht für die normale Suche in diesem Bereich sichtbar. Stattdessen wird es nur über die argumentabhängige Suche (ADL) zugänglich gemacht.
Dieses Verhalten wird in 7.3.1.2/3 des Standards hervorgehoben:
„Wenn eine Freund-Deklaration in einer nicht -local-Klasse deklariert zuerst eine Klasse oder Funktion, die Freundklasse oder -funktion ist Mitglied des innersten umschließenden Namespace. Der Name des Freundes wird weder durch unqualifizierte Suche noch durch qualifizierte Suche gefunden Suche, bis eine passende Deklaration in diesem Namespace-Bereich bereitgestellt wird.“
Im Wesentlichen können Inline-Friend-Funktionen nur über ADL aufgerufen werden, was nicht möglich ist, wenn keine Argumente bereitgestellt werden. Daher führen Versuche, solche Funktionen direkt über den umschließenden Bereich der Klasse oder über Mitgliedsfunktionen aufzurufen, zu Kompilierungsfehlern, wie in den bereitgestellten Codebeispielen gezeigt.
Das obige ist der detaillierte Inhalt vonWie kann in C auf Inline-Friend-Funktionen zugegriffen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!