Heim > Backend-Entwicklung > C++ > Was ist ODR-Verwendung in C-Klassen-Vorlagen-Memberfunktionen?

Was ist ODR-Verwendung in C-Klassen-Vorlagen-Memberfunktionen?

Linda Hamilton
Freigeben: 2024-12-06 11:44:11
Original
955 Leute haben es durchsucht

What is ODR-Use in C   Class Template Member Functions?

Verstehen der ODR-Nutzung in C

Im Kontext der C-Programmierung taucht das Konzept der „ODR-Nutzung“ häufig auf, wenn es um den Unterricht geht Vorlagen-Memberfunktionen.

Die One Definition Rule (ODR) stellt sicher, dass es für jede Entität in allen Übersetzungseinheiten in einem eine einzige, konsistente Definition gibt Programm. ODR-use definiert, wann für eine Entität eine Definition und nicht nur eine Deklaration bereitgestellt werden muss.

Gemäß dem C-Standard wird eine nicht überladene Funktion odr-verwendet, wenn:

  • Sein Name erscheint in einem potenziell ausgewerteten Ausdruck.
  • Es ist ein Mitglied einer Reihe von Kandidatenfunktionen, die durch Überladung ausgewählt werden Auflösung.
  • Es handelt sich um eine nicht rein virtuelle Funktion.

ODR-Verwendung und Klassenvorlagen-Mitgliedsfunktionen

Für Klassenvorlagenmitglieder Funktionen bedeutet die ODR-Verwendungsregel, dass sie nur dann instanziiert werden, wenn sie:

  • Aufgerufen werden explizit.
  • Virtuell und die Klasse selbst wird instanziiert (auch wenn die Funktion nicht aufgerufen wird).

Diese Regel stellt sicher, dass Template-Memberfunktionen nur dann instanziiert werden, wenn sie tatsächlich benötigt werden. Standardmäßig instanziiert der Compiler nicht verwendete Mitgliedsfunktionen nicht, was Kompilierungszeit spart.

ODR-Verwendung und mehrere Kompilierungseinheiten

Bei Verwendung mehrerer Kompilierungseinheiten muss der Compiler dies tun Stellen Sie sicher, dass alle von odr verwendeten Entitäten genau einmal definiert werden. Dies wird durch das Konzept der „primären Vorlagen“ erreicht. Eine primäre Vorlage ist die erste Instanziierung einer Vorlage in einer Übersetzungseinheit. Alle nachfolgenden Vorlageninstanziierungen in anderen Übersetzungseinheiten gelten als sekundäre Instanziierungen.

Die primäre Vorlage ist für die Definition der von odr verwendeten Entitäten verantwortlich. Wenn eine Mitgliedsfunktion von odr verwendet, aber nicht innerhalb der primären Vorlage aufgerufen wird, muss sie dennoch mit einer Definition deklariert werden, um die ODR zu erfüllen.

Instanziierung aller Mitgliedsfunktionen

Das explizite Instanziieren einer Klassenvorlage garantiert die Instanziierung aller Mitgliedsfunktionen, einschließlich der von odr verwendeten Funktionen, die nicht aufgerufen werden. Dadurch wird sichergestellt, dass die vollständige Definition für alle Kompilierungseinheiten verfügbar ist und mögliche Verknüpfungsfehler vermieden werden. Es ist jedoch nicht immer notwendig oder effizient, nicht verwendete Mitgliedsfunktionen zu instanziieren.

Das obige ist der detaillierte Inhalt vonWas ist ODR-Verwendung in C-Klassen-Vorlagen-Memberfunktionen?. 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