Freigeben über


C++-Funktionsdefinitionen

Funktionsdefinitionen unterscheiden sich von den Funktionsdeklarationen darin, dass sie Funktionsrümpfe – der Code, der die Funktion bildet – bereitstellen. Die Form einer Funktionsdefinition lautet:

decl-specifiers declarator [cv-qualifers] [exception-specification]
{
   // function body
}
decl-specifiers declarator [cv-qualifers] =default;

decl-specifiers declarator [cv-qualifers] =delete;

Die Definitionsteile sind:

  • Deklarationsspezifizierer wie in Funktionsdeklarationen beschrieben.

  • Der Deklarator (weiter unten in diesem Artikel beschrieben).

  • Ein optionaler const- oder volatile-Qualifizierer. In diesem Kontext wird const möglicherweise nur für Klassenmember verwendet, um anzugeben, dass die Funktion keine Datenmember der Klasse ändert.

  • Ausnahmespezifikation, die beschreibt, welche Ausnahmen die Funktion möglicherweise auslöst. Siehe Ausnahmespezifikationen.

  • Funktionsrumpf, bestehend aus Anweisungen eingeschlossen in geschweiften Klammern {}.

  • =default; bei einer expliziten Standardwertdefinition.

  • =delete; bei einer gelöschten Definition.

Die Form des Deklarators ist:

  • Optionale Zeiger- oder Verweisoperatoren, die den Rückgabetyp ändern.

  • Ein optionaler Microsoft-spezifischer Modifizierer. Siehe Microsoft-spezifische Modifizierer.

  • Der Name der Funktion. Wenn die Funktion ein Member einer Klasse oder Struktur ist, kann der Name mithilfe des Bereichsauflösungsoperators qualifiziert werden.

  • Die Argumentdeklarationsliste in Klammern () eingeschlossen.

  • Für Konstruktoren ein optionaler Konstruktorinitialisierer (weiter unten in diesem Artikel beschrieben).

Weitere Informationen zur Form des Deklarators in solchen Fällen finden Sie in den Kommentaren unter Funktionsdeklarationen zu Funktionen, die Funktionszeiger zurückgeben.

Die formalen Argumente, die in der Argumentdeklarationsliste deklariert sind, befinden sich im Bereich des Funktionstexts.

Die folgende Abbildung zeigt die Teile einer Funktionsdefinition. Der schattierte Bereich ist der Funktionsrumpf.

Teile einer Funktionsdefinition

Teile einer Funktionsdefinition

Das Konstruktorinitialisiererelement der Syntax wird nur in Konstruktoren verwendet. Sein Zweck besteht darin, die Initialisierung von Basisklassen und enthaltenen Objekten zu ermöglichen. Weitere Informationen zur Verwendung des Konstruktorinitialisierers finden Sie unter Initialisieren von Basen und Membern.

Eine explizit auf den Standardwert festgelegte Definition kann nur für eine spezielle Memberfunktion deklariert werden. Wenn eine spezielle Memberfunktion explizit auf den Standardwert festgelegt ist, wird sie von der Implementierung so definiert als hätte sie eine implizite Definition, allerdings kann sie nicht inline sein (eine implizit deklarierte spezielle Memberfunktion ist immer inline). Weitere Informationen zu Standardfunktionen finden Sie im Abschnitt zu Defaulted- und Deleted-Funktionen unter Unterstützung für C++11-Funktionen (Modern C++).

Eine gelöschte Definition, auch als gelöschte Funktion bezeichnet, ist implizit inline. Ein Programm, das explizit oder implizit auf eine gelöschte Funktion verweist, ist nicht ordnungsgemäß formatiert, außer sie wird deklariert. Weitere Informationen zu gelöschten Funktionen finden Sie im Abschnitt zu Defaulted- und Deleted-Funktionen unter Unterstützung für C++11-Funktionen (Modern C++).

Siehe auch

Referenz

Deklaratoren

Konzepte

Argumentbezogene Namenssuche (Koenig) in Funktionen