Heim  >  Artikel  >  Backend-Entwicklung  >  Können Inline-Memberfunktionen in einer CPP-Datei definiert und trotzdem inline sein?

Können Inline-Memberfunktionen in einer CPP-Datei definiert und trotzdem inline sein?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-26 19:03:02616Durchsuche

Can Inline Member Functions Be Defined in a .cpp File and Still Be Inlined?

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!

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