Inline-Funktionen in C++

Suraj P 12 Oktober 2023
  1. Warum inline-Funktionen in C++ verwendet werden
  2. Implementieren Sie inline-Funktionen in C++
  3. Implementieren von constructor und destructor als inline-Funktionen in C++
  4. Vor- und Nachteile der Implementierung von inline-Funktionen in C++
Inline-Funktionen in C++

Dieser Artikel behandelt inline-Funktionen in C++, wie man sie implementiert und welche Vor- und Nachteile ihre Verwendung hat.

Warum inline-Funktionen in C++ verwendet werden

Immer wenn wir ein Programm ausführen, speichert die CPU die Speicheradresse der Anweisung nach dem Funktionsaufruf; Es kopiert die Argumente auf den Stack und übergibt die Steuerung an die angegebene Funktion.

Dann führt die CPU den Code aus, gibt den Wert an einer bestimmten Speicherstelle zurück und kehrt wieder zur aufgerufenen Funktion zurück. Es kann zu einem zusätzlichen Overhead führen, wenn die meiste Zeit für das Umschalten anstatt für das Ausführen der Funktion aufgewendet wird.

Dieser Overhead ist bei großen Funktionen, die komplexe CPU-intensive Aufgaben ausführen, unbedeutend, da die meiste Zeit nur für die Ausführung aufgewendet wird.

Dieser Overhead wird jedoch erheblich, wenn wir viele kleine Funktionen haben, die nur grundlegende Aufgaben ausführen. Die meiste Zeit wird für das Wechseln aufgewendet, und wenig bis gar keine Zeit wird für die Ausführung aufgewendet.

Das Konzept inline kann also praktisch sein, wenn wir viele kleine Funktionen haben, um Schaltzeit zu sparen und die Effizienz zu steigern.

Immer wenn eine Funktion zur Kompilierzeit im Code als inline deklariert wird, kopiert sie den gesamten Funktionscode und fügt ihn an dieser Stelle ein, anstatt beim Funktionsaufruf eine Adresse zuzuweisen.

Syntax:

inline return_type function_name(arguments)
{
...
}

Eine inline-Funktion ist nur eine Anfrage an den Compiler, daher kann der Compiler sie ignorieren, wenn:

  1. die Funktion hat statische Variablen;
  2. die Funktion hat goto- oder switch-Anweisungen;
  3. die Funktion ist rekursiv;
  4. Die Funktion hat Schleifen.

Der Begriff inline wird im Allgemeinen bei Klassen verwendet.

Implementieren Sie inline-Funktionen in C++

Beispielcode:

#include <iostream>
using namespace std;

class myClass {
  int a, b;

 public:
  void sum();
};

inline void myClass ::sum() {
  cout << "Enter first value:";
  cin >> a;
  cout << "Enter second value:";
  cin >> b;
  cout << "Sum of two numbers is " << a + b << endl;
}

int main() {
  cout << "Program using inline function\n";
  myClass obj;
  obj.sum();
}

Im obigen Code haben wir die Funktion als inline deklariert, während wir sie definiert haben, weil es eine gute Programmierpraxis ist, die eigentliche inline-Funktionsdefinition außerhalb der Klasse zu schreiben und nicht innerhalb der Klasse.

Eine Funktionsdefinition in einer Klasse ist jedoch standardmäßig eine inline-Funktionsdefinition, auch ohne das Schlüsselwort inline.

Ausgabe:

Program using inline function
Enter first value:12
Enter second value:13
Sum of two numbers is 25

Implementieren von constructor und destructor als inline-Funktionen in C++

Wenn wir das obige Beispiel verwenden und inline-Funktionen außerhalb der Klasse erstellen, während wir sie definieren, können wir sogar constructor und destructor als inline machen.

Beispielcode:

#include <iostream>
using namespace std;

class myClass {
  int a, b;

 public:
  myClass();
  ~myClass();
  void sum();
};

inline myClass::myClass() {
  a = 100;
  b = 200;
}

inline myClass::~myClass() { cout << "destroying the object\n"; }

inline void myClass ::sum() {
  cout << "Sum of two numbers is " << a + b << endl;
}

int main() {
  cout << "Program using inline function\n";
  myClass obj;
  obj.sum();
}

Ausgabe:

Program using inline function
Sum of two numbers is 300
destroying the object

Vor- und Nachteile der Implementierung von inline-Funktionen in C++

Schauen wir uns nun einige der Vorteile der Implementierung von inline-Funktionen an:

  1. Overhead des Funktionsaufrufs wird reduziert.
  2. Es spart den Overhead eines Rückrufs von einer Funktion.
  3. Spart Overhead beim Pushen und Popping von Variablen auf dem Stack.

Obwohl es nützlich ist, hat es auch einige Nachteile:

  1. Die Größe der ausführbaren Binärdatei kann groß werden, wenn wir zu viele inline-Funktionen verwenden, da hier derselbe Code dupliziert wird.
  2. Zu viele Inline-Funktionen können die Cache-Trefferrate für die Befehle verringern, was sich auf die Geschwindigkeit des Befehlsabrufs vom Cache-Speicher zum Primärspeicher auswirkt.
  3. In eingebetteten Systemen, wo die Codegröße wichtiger ist als die Geschwindigkeit, sind inline-Funktionen nicht hilfreich.
  4. Thrashing kann auftreten, wodurch die Speicherleistung des Computers beeinträchtigt wird.
Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Verwandter Artikel - C++ Function