Heim > Backend-Entwicklung > C++ > Warum schlägt die argumentabhängige Suche (ADL) für C-Funktionsvorlagen fehl?

Warum schlägt die argumentabhängige Suche (ADL) für C-Funktionsvorlagen fehl?

Mary-Kate Olsen
Freigeben: 2024-12-11 08:48:11
Original
731 Leute haben es durchsucht

Why Does Argument-Dependent Lookup (ADL) Fail for C   Function Templates?

ADL-Fehler beim Finden von Funktionsvorlagen

In C ermöglicht die argumentabhängige Suche (ADL) die Suche nach Deklarationen von Funktionsnamen innerhalb der Namespaces, die den Argumenten in einem Funktionsaufruf zugeordnet sind. Allerdings gibt es in der C-Spezifikation eine Einschränkung, wenn es um Funktionsvorlagen und ADL geht.

Die Einschränkung

Laut C-Standard 14.8.1.6 gilt dies für ADL nicht gelten für Funktionsvorlagen, es sei denn, es gibt zum Zeitpunkt des Aufrufs eine sichtbare Funktionsvorlage mit demselben Namen. Das bedeutet, dass bei Funktionsvorlagen mit expliziten Vorlagenargumenten der Aufruf die richtige syntaktische Form mit einer sichtbaren Funktionsvorlage haben muss.

Beispiel

Betrachten Sie das folgende Beispiel:

namespace ns {
    struct foo {};
    template<int i> void frob(foo const&amp;) {}
    void non_template(foo const&amp;) {}
}

int main() {
    ns::foo f;
    non_template(f); // This is fine.
    frob<0>(f); // This is not.
}
Nach dem Login kopieren

In diesem Beispiel findet und löst ADL „non_template“ beim ersten Aufruf auf, da „non_template“ eine gewöhnliche Funktion ist. Für den zweiten Aufruf ist frob jedoch eine Funktionsvorlage. Da zum Zeitpunkt des Aufrufs keine sichtbare Frob-Funktionsvorlage vorhanden ist, schlägt ADL fehl und der Aufruf ist syntaktisch nicht wohlgeformt.

Behebung der Einschränkung

An Um diese Einschränkung zu umgehen, stellen Sie sicher, dass die Funktionsvorlage im Bereich des Aufrufs sichtbar ist. Dies kann erreicht werden, indem die Funktionsvorlage im aktuellen Namensraum deklariert wird oder indem der Aufruf mit dem Namensraum qualifiziert wird, der die Funktionsvorlage enthält.

Das obige ist der detaillierte Inhalt vonWarum schlägt die argumentabhängige Suche (ADL) für C-Funktionsvorlagen fehl?. 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