Inline -Funktionen in C ++

Inline -Funktionen in C ++
Wenn eine normale Funktion in C ++ aufgerufen wird, werden einige nur zum Aufrufen der Funktion belauscht. Tatsächlich braucht das Aufrufen einer Funktion einige Zeit, bis die Funktion wirklich mit der Ausführung beginnt. Diesmal zwischen dem aufgerufenen Funktion und wenn die Funktion wirklich mit der Ausführung beginnt, wird die Schaltzeit bezeichnet. Wenn die normale Funktion groß ist, was bedeutet, dass die Ausführung lange dauert, ist die Schaltzeit relativ klein und der Benutzer kann sie ignorieren. Wenn die normale Funktion jedoch klein ist, wie viele Funktionen, sollte die Schaltzeit, ungefähr gleich für große und kleine Funktionen, nicht ignoriert werden. In vielen Situationen ist die Schaltzeit länger als die Zeit, in der die kleine Funktion wirklich ausgeführt wird. in einigen Fällen viel länger.

Um dieses Problem zu lösen, verwendet C ++ Makro und die Inline -Funktion. Ein Makro ist wie eine kleine Funktion, aber normalerweise kürzer als eine typische kleine Funktion. Das längste Makro ist immer noch eine „Aussage“. Ein Funktionskörper kann mehr als eine Anweisung haben. Eine kleine Inline -Funktion hat Vorteile gegenüber einer normalen kleinen Funktion.

Wenn ein Makro definiert ist, wird es später im Programm aufgerufen. Eine Inline -Funktion wird ebenfalls definiert und später im Programm aufgerufen. Eine normale Funktion wird definiert und später im Programm aufgerufen. Alle diese drei Typen werden definiert und später im Programm aufgerufen. Jeder von ihnen kann mehr als einmal genannt werden.

Die Makro- und kleinen Inline -Funktionen unterscheiden sich von der normalen Annäherungsfunktion, wenn sie sich später im Programm befinden. Der C ++ - Compiler platziert den definierten Makrocode oder den definierten kleinen Inline -Funktionscode (Körper), wo immer er im Programm aufgerufen wird. Wenn der Compiler dies tut, soll der Compiler das Makro oder die Inline -Funktion erweitert haben. Dies ist bei einer normalen Funktion nicht der Fall. Die normale Funktion wird nicht erweitert, wo sie aufgerufen wird.

Während der Aufruf einer normalen Funktion die Zeitschaltzeit erfordert, damit die Funktion vor ihrer Ausführung ordnungsgemäß geltend gemacht wird. Das ist der Hauptvorteil, den das Makro und die kleine Inline -Funktion gegenüber der normalen Funktion haben, i, ich.e., Die Schaltzeit wird weggelassen.

Dieser Artikel erläutert Inline -Funktionen in C ++ im Vergleich zu Makros. Eine Erklärung des Makros wird gegeben. Ein Vergleich der Inline -Funktion und der normalen Funktion erfolgt gegen Ende des Artikels.

Hinweis: Das Aufrufen eines Makros in einem Programm soll das Makro anrufen.

Artikelinhalt

  • Einführung - siehe oben
  • Definieren von Makros und Inline -Funktionen
  • Inline -Funktion und der Compiler
  • Vergleich von Makros und Inline -Funktionen
  • Vergleich von Inline- und Normalfunktionen
  • Abschluss

Definieren von Makros und Inline -Funktionen

Objektähnliche Makro- und Inline-Variable
Es gibt ein objektähnliches Makro und es gibt ein funktionsähnliches Makro. Entsprechend gibt es Inline -Variablen und Inline -Funktionen. Betrachten Sie das folgende C ++ - Programm:

#enthalten
Verwenden von Namespace STD;
#define var1 "e"
inline char var2 = 'e';
int main ()

Cout << var1 << endl;
Cout << var2 << endl;
Rückkehr 0;

Die Ausgabe ist:

E
E

Dieses Programm verfügt über ein objektähnliches Makro und eine Inline-Variable. Jeder hält den Wert "E". Ein objektähnliches Makro beginnt mit #Define und hat keinen Typindikator. Eine Inline -Variable beginnt mit „Inline“, und es folgt eine Typindikator. Makros haben im Vergleich zu Inline -Typen einen Nachteil, da sie den Typ nicht angeben. Dies kann zu Mismatch -Problemen im Programm führen. In der Funktion main () sind var1 und var2 der Definitionscode der verschiedenen Variablen.

HINWEIS: Es ist nicht klar, ob Var1 einen Zeichen oder eine wörtliche Zeichenfolge enthält. Beachten Sie auch, dass ein Makro, ob objektartig oder funktionsartig, nicht mit einem Semikolon endet. Es endet durch Drücken der Eingabetaste. Eine Inline -Variable- oder Inline -Funktion endet auf ihre jeweilige normale Weise.

Funktionsartiges Makro- und Inline-Funktion
Ein funktionsähnliches Makro ist ein Makro, das Argumente nimmt. Wie das objektähnliche Makro, wo immer das funktionsähnliche Makro im Programm aufgerufen wird.

Eine Inline -Funktion ist eine Funktion, die mit "Inline" beginnt. Es hat einen Vorteil gegenüber dem funktionsähnlichen Makro mit seinen Rückgabetypen und Argumententypen. Ein funktionsähnliches Makro hat keine Argumentypen oder Rückgabetypen. Sein Rückgabetyp ist der Endwert des Makroamens.

Das folgende C ++-Programm hat ein funktionsähnliches Makro und eine Inline. Die Inline -Funktion vergleicht zwei Ganzzahlen und gibt die größere Ganzzahl zurück. Der Rückgabewert der Inline -Funktion kann einer neuen INT -Variablen zugewiesen werden. Andererseits wird der Endwert des Makros zum Wert des Makros.

#enthalten
Verwenden von Namespace STD;
#Define Maxm (a, b) (a)> (b) ? (a): (b))
Inline int maxi (int a, int b)
if (a> b)
Rückkehr a;
wenn ein < b)
Rückkehr B;
if (a == b)
Rückkehr a;

int main ()

Cout << maxM(2.5, 6) << endl;
Cout << maxI(3, 7) << endl;
Rückkehr 0;

Die Ausgabe ist:

6
7

Mit dem Makro sollten die Argumente von kompatiblen Typen sein. Dies gibt dem Makro einen Vorteil gegenüber der Inline -Funktion, deren Argumentypen in diesem Fall gleich sein sollten.

Der Name des Makros ist maxm. Die Argumente sind a und b. Der Rest ist eine Art Funktionskörper, die von Klammern abgegrenzt wird. Es heißt, wenn (a)> (b) wahr ist, wird a zum Wert des Makros; Ansonsten wird B zum Wert des Makros.

Inline -Funktion und der Compiler

Nachdem der Compiler den Inline -Funktionsaufruf durch den Definitionscode der Funktion ersetzt hat, muss das Programm noch ausgeführt werden. In der Zusammenstellung wird das Programm nicht ausgeführt oder ausgeführt. Mit der normalen Funktion tritt Overhead (Schaltzeit) auf, wenn das Programm ausgeführt wird (ausgeführt). Makro- oder Inline -Ersatz erfolgt während der Zusammenstellung, dh vor der Ausführung (bevor das Programm an den Kunden oder Benutzer gesendet wird).

Am Ende wird die Schaltzeit für Makros und kleine Inline -Funktionen weggelassen oder gewonnen. Wenn die Inline -Funktion jedoch groß ist, entscheidet der Compiler, ob die Funktion als Inline, Inline oder nicht deklariert wird. Wenn die als Inline festgelegte Funktion groß ist, kann es keinen signifikanten Gewinn geben, einen seiner Aufrufe durch den Körper seines Funktionscode zu ersetzen. Was die Kriterien der Compiler -Entscheidung betrifft - siehe später.

HINWEIS: Eine in einer Klassendefinition definierte Funktion ist eine Inline -Funktion, vor der der Inline -Spezifizierer vorangegangen ist.

Vergleich von Makros und Inline -Funktionen

Das Makro kann mit verschiedenen Typen funktionieren, solange sie kompatibel sind. Dies ist ein Vorteil. Dies führt jedoch auch zu Nebenwirkungen, die ihm dann einen Nachteil verleihen. Die Inline -Funktion testet die Gültigkeit ihrer Argumententypen, bevor die Argumente verwendet werden, was Nebenwirkungen verhindert.

Vergleich von Inline- und Normalfunktionen

Vorteile der Inline -Funktion

  • Es gibt keinen Funktionsaufruf -Overhead (keine Schaltzeit).
  • Es gibt auch Overhead, wenn eine normale Funktion zurückkehrt. Mit der Inline -Funktion gibt es keinen Rückruf -Overhead.
  • Es gibt eine mögliche kontextspezifische Optimierung des Funktionskörpers mit der Inline-Funktion.

Nachteile der Inline -Funktion

  • Für jeden Aufruf der Inline -Funktion wird der Code für Funktionsdefinition (Körper) wiederholt (wurde vom Compiler wieder resotypiert). Dies kann zu einer sehr großen, binären (kompilierten) Datei führen.
  • Der Compiler dauert lange, um zu kompilieren, da er den gleichen Code für alle Anrufe wiederholt.

Inline -Funktionen sind für viele eingebettete Systeme möglicherweise nicht erforderlich, da eine kleinere Programmgröße einer höheren Geschwindigkeit vorzuziehen ist.

Es gibt andere Nachteile - später siehe.

Abschluss

Die Inline -Funktion ist wie ein Makro. Sie erfüllen den gleichen Zweck. Der Definitionscode ersetzt jeden Aufruf oder Funktionsaufruf. Eine Inline -Funktion hat jedoch mehr Vorteile gegenüber dem Makro. Es gibt das objektähnliche Makro, und es gibt entsprechend die Inline-Variable. Es gibt das funktionsähnliche Makro, und es gibt entsprechend die Inline-Funktion. Eine in einer Klassendefinition definierte Funktion ist eine Inline -Funktion, unabhängig davon.

Um ein objektähnliches Makro oder ein funktionsähnliches Makro zu definieren, gehen Sie mit #Define gefolgt vom Macro-Namen vor. Das Makro gibt seinen Werttyp oder Argumentypen nicht an. Um eine Inline -Variable oder eine Inline -Funktion zu definieren, gehen Sie mit dem Spezifizierer, Inline, gefolgt vom Rückgabetyp und dann dem Namen vor. Für die Inline -Funktion sind sowohl der Rückgabetyp als auch die Argumentypen präzise. Nebenwirkungen werden verhindert.

Die Inline -Funktion hat insgesamt Vorteile gegenüber dem Makro. Es gibt Vor- und Nachteile, wenn die Inline -Funktion mit der normalen Funktion verglichen wird.