Heim  >  Artikel  >  Backend-Entwicklung  >  Kann ich Inline-Memberfunktionen in einer CPP-Datei definieren und trotzdem Inlining erhalten?

Kann ich Inline-Memberfunktionen in einer CPP-Datei definieren und trotzdem Inlining erhalten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-28 17:34:30311Durchsuche

 Can I Define Inline Member Functions in a .cpp File and Still Get Inlining?

Inline-Member-Funktionsdefinition in der .cpp-Datei

In C sollten Inline-Member-Funktionen idealerweise in der Header-Datei definiert werden, um den Compiler zu ermöglichen um sie während der Kompilierung einzubinden. In bestimmten Situationen kann es jedoch erforderlich sein, die Implementierung außerhalb des Headers zu platzieren, z. B. bei zirkulären Abhängigkeiten zwischen Klassen.

Im angegebenen Beispiel enthält die Klasse A die Klasse B, die wiederum eine Vorwärtsdeklaration von A enthält. Um dies zu vermeiden Aufgrund dieser Zirkularität ist die Funktion getA() der Klasse B in B.cpp definiert. Dies wirft die Frage auf: Wird der Compiler weiterhin getA() inline verwenden, und wenn ja, welche Definition hat Vorrang?

Gemäß den C-FAQ muss die Definition einer Inline-Funktion in einer Header-Datei dafür platziert werden damit es für alle Quelldateien sichtbar ist, die es verwenden. Daher inlinet der Compiler in diesem Szenario getA() nicht, es sei denn, er wird innerhalb von B.cpp selbst aufgerufen.

Best Practice schreibt vor, dass das Inline-Schlüsselwort nur einmal in der Funktionsdefinition außerhalb der Klasse verwendet werden sollte Körper. Daher ist jedes in der Header-Datei platzierte Inline-Schlüsselwort überflüssig.

Leider ist keine Methode bekannt, um eine Inline-Member-Funktion in der .cpp-Datei zu definieren und gleichzeitig deren Inlining durch den Compiler sicherzustellen.

Das obige ist der detaillierte Inhalt vonKann ich Inline-Memberfunktionen in einer CPP-Datei definieren und trotzdem Inlining erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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