Mitgliederfunktionen mit ihrem Körper innerhalb der Klassendefinition sind implizit inline
, so dass Ihre zwei Codebeispiele die gleichen sind.
Es ist jedoch anders, wenn der Körper außerhalb der Leitung vorgesehen ist:
class foo
{
public:
int example1(int i);
inline int example2(int i);
};
In diesem Code foo::example2
ist eine Inline-Funktion. Die Out-of-Line-Definition muss auch in der Kopfzeile angezeigt werden (es sei denn, die Funktion ist nie odr- verwendet). Es ist optional, ob die Out-of-Line-Definition auch den Spezifizierer inline
enthält.
Für foo::example1
, wenn es eine Out-of-Line-Definition mit inline
Spezifizierer gibt, dann ist die Funktion inline
. Auch wenn eine solche Definition vorhanden ist, muss sie im Header sein, es sei denn, die Funktion ist nie oder.
Diese ODR-Verletzungen sind nicht definiert und erfordern keine Diagnose. In der Praxis bedeutet dies wahrscheinlich, dass es scheinbar "funktioniert" oder einen Verbindungsfehler gibt.
Normalerweise würden Sie nur meinen example2
Fall verwenden, wenn Sie die Funktionsdefinition in der Kopfzeile angezeigt werden sollen, aber sie denken, dass es besser lesbar ist die Klassendefinition kompakt und die Funktion Körper später zu haben.
In diesem Fall würde ich empfehlen, inline
sowohl in der Deklaration und Definition zu verwenden, um die Lesbarkeit zu verbessern.
Hinweis für Windows-Programmierung: Wenn die Klasse __declspec(dllexport)
oder __declspec(dllimport)
markiert ist, dann warnt gcc über example1
. Ich bin nicht sicher, was das richtige Verhalten hier ist, aber um mögliche Probleme zu vermeiden, verwenden Sie inline
in der Deklaration.
Mögliches Duplikat [Wann soll ich das Stichwort 'inline' für eine Funktion/Methode schreiben?] (Http://stackoverflow.com/questions/1759300/when-should-i-write -the-keyword-inline-for-a-function-Methode) – HostileFork
Das sind die gleichen. Klassenmemberfunktionen werden automatisch inline, wenn ihre Definition in der Kopfzeile angezeigt wird. Sie müssen nur Nicht-Member-Funktionen "inline" markieren, wenn Sie sie dann in der Header-Datei und nicht in einer Quelldatei (.cpp) definieren möchten, um dem Compiler die Möglichkeit zu geben, Aufrufe zu optimieren. – Galik
@HostileFork die Antworten dort scheinen nur über Nichtmitgliedsfunktionen zu sprechen –