C-Inline-Member-Funktion in .cpp-Datei: Ein Dilemma und eine Lösung
In C werden Inline-Member-Funktionen normalerweise in Header-Dateien für deklariert Effizienzgründen. In bestimmten Szenarien kann es jedoch erforderlich sein, die Funktion in einer CPP-Datei zu implementieren. Lassen Sie uns in eine solche Situation eintauchen:
Betrachten Sie das folgende Szenario mit zirkulären Abhängigkeiten:
A.h
<code class="cpp">#pragma once #include "B.h" class A { B b; };</code>
B.h
<code class="cpp">#pragma once class A; class B { inline A getA(); };</code>
Um die zirkuläre Abhängigkeit zu durchbrechen, muss die Implementierung von getA in B.cpp platziert werden:
B.cpp
<code class="cpp">#include "B.h" #include "A.h" inline A B::getA() { return A(); }</code>
Das Dilemma
Beeinflusst die Platzierung des Inline-Schlüsselworts sowohl im Header als auch in der .cpp-Datei das Inlining der Funktion?
Auflösung
Trotz des Schlüsselworts „inline“ in der .cpp-Datei führt der Compiler getA nicht inline aus, es sei denn, es wird in B.cpp selbst verwendet. Dies liegt daran, dass der Compiler bei jedem Auftreten die Definition der Inline-Funktion erfordert. Normalerweise wird diese Verfügbarkeit durch Platzieren der Funktion in einer Header-Datei sichergestellt.
Best Practice
Gemäß C FAQ ist es zwingend erforderlich, Inline-Funktionen in Header-Dateien zu definieren. Das Platzieren in .cpp-Dateien kann zu ungelösten externen Fehlern führen.
Alternative Lösung
Das bereitgestellte Szenario schlägt keine alternative Lösung zum Platzieren der Inline-Funktion in einer . cpp-Datei.
Das obige ist der detaillierte Inhalt vonKönnen Inline-Memberfunktionen in einer CPP-Datei definiert und trotzdem inline sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!