C++ Tutorial

 Inline (Member-)Funktionen

Bei einer inline (Member-)Funktion versucht der Compiler anstelle des Funktionsaufrufs den Code der Funktion einzufügen. Dabei entfällt der sonst notwendige Verwaltungsaufwand für die Übergabe der Parameter und der Rücksprungadresse.

inline-Funktionen

Eine Funktion wird zur inline-Funktion, indem vor dem Returntyp der Funktion das Schlüsselwort inline gestellt wird.

#include <iostream>
#include <format>

// inline-Funktion, begrenzt den uebergebenen Wert
inline int Limit10(int val)
{
   static int maxVal=10;
   if (val>maxVal)
      return maxVal;
   else
      return val;
}

int main()
{
   int input;
   std::cout << "Bitte einen Wert eingeben: ";
   std::cin >> input;
   // Hier versucht der Compiler anstelle des Funktionsaufrufs
   // den Code der Funktion Limit10() einzufügen
   auto res = Limit10(input);
   std::cout << std::format(„Nach Limit10(): {}\n“,res);
}

inline-Memberfunktionen

Memberfunktionen, die innerhalb der Klassendefinition werden und deren Klasse nicht in einem benannten Modul definiert ist, werden automatisch als inline-Memberfunktionen betrachtet.

Um eine außerhalb der Klasse definierte Memberfunktion als inline-Memberfunktion zu definieren, ist wiederum das Schlüsselwort inline vor dem Returntyp der Memberfunktion anzugeben.

Bei Klassen, die in einem benannten Modul definiert sind, sind inline-Memberfunktion stets explizit als inline zu kennzeichnen.

#include <iostream>
#include <format>

class Any
{
   int value;
public:
   Any(int val): value(val)
   {}
   // PrintImpl() wird implizit als inline-Memberfkt behandelt
   void PrintImpl()
   {
      std::cout << std::format(„Wert: {}\n“,value);
   }
   // PrintExpl() muss explizit als inline-Memberfkt. definiert werden
   void PrintExpl();
};
// Explizite inline-Definition
inline void Any::PrintExpl()
{
   std::cout << std::format(„Wert: {}\n“,value);
}

int main()
{
   Any obj(10);
   obj.PrintImpl();
   obj.PrintExpl();
}