Heim > Backend-Entwicklung > C++ > Was ist ODR-Nutzung in C und wann ist eine Definition erforderlich?

Was ist ODR-Nutzung in C und wann ist eine Definition erforderlich?

Patricia Arquette
Freigeben: 2024-12-06 12:05:15
Original
707 Leute haben es durchsucht

What is ODR-Use in C   and When is a Definition Required?

Verstehen der „ODR-Verwendung“ in C

In C stellt das Konzept der „One Definition Rule“ (ODR) dies für jeden sicher Entität in mehreren Kompilierungseinheiten deklariert, es gibt nur eine Definition. Es kann jedoch verwirrend sein, festzustellen, wann eine Definition erforderlich ist. In diesem Zusammenhang kommt der Begriff „odr-use“ ins Spiel.

Laut C-Standard wird eine Variable oder Funktion odr-used:

  • Wenn ihr Name in a potenziell ausgewerteter Ausdruck und ist kein Objekt, das für die Auswertung konstanter Ausdrücke geeignet ist.
  • Im Fall einer nicht überladenen Funktion, wenn ihr Name in a erscheint potenziell ausgewerteter Ausdruck oder in einer Reihe von Kandidatenfunktionen, die durch Überladungsauflösung ausgewählt werden.

Diese Definition ist etwas abstrakt, also vereinfachen wir sie. Odr-use bedeutet im Wesentlichen, dass eine Entität so verwendet wird, dass sie irgendwo im Programm definiert werden muss. Dazu gehört die tatsächliche Nutzung, etwa das Aufrufen einer Funktion oder der Zugriff auf eine Variable, aber auch die potenzielle Nutzung, etwa als Kandidat für eine Überladungsauflösung.

Im Fall von Klassenvorlagen-Mitgliedsfunktionen werden sie nur instanziiert ( und daher definiert), wenn sie odr-verwendet werden. Das bedeutet, dass sie aufgerufen werden müssen oder die Klasse selbst instanziiert werden muss, wobei diese Mitgliedsfunktion virtuell ist.

Der Standard basiert auf diesem Prinzip, um unnötige Instanziierung zu verhindern. Beispielsweise erfordert die Funktion std::list::sort den Operator< auf seine Elemente. Durch die Deklaration der Liste mit einem Elementtyp, der den Operator< nicht unterstützt, wird die Mitgliedsfunktion nicht instanziiert, solange sort nicht aufgerufen wird.

Das Verständnis der ODR-Verwendung ist entscheidend, um Fehler im Zusammenhang mit Missing zu vermeiden Definitionen und mehrere Definitionen in mehreren Kompilierungseinheiten. Durch Befolgen dieser Regeln können Programmierer robusten und wartbaren C-Code schreiben.

Das obige ist der detaillierte Inhalt vonWas ist ODR-Nutzung in C und wann ist eine Definition erforderlich?. 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