Die Friend-Funktion eines Nichtmitglieds ist immer Inline

8

Ich bin sehr neu in C ++, und als ich versuchte, die Friend-Funktion zu lernen, sah ich von Freundesbeschreibung auf Cppreference , dass:

  

2) (nur in nicht-lokalen Klassendefinitionen erlaubt) Definiert eine Nicht-Member-Funktion und macht sie gleichzeitig zum Freund dieser Klasse. Eine solche Nichtmitgliedsfunktion ist immer inline .

%Vor%

Bedeutet dies, dass alle Friend-Funktionen immer inline sein müssen? In einem anderen Wort, müssen die Freundfunktionen vollständig innerhalb der Klasse definiert werden?

Ich habe jedoch auch eine Instanz gefunden, in der die Friend-Funktion außerhalb der Klasse von Cplusplus

%Vor%

Ich bin wirklich verwirrt von diesem Konflikt. Ist mein Verständnis von inline falsch? Was bedeutet " eine Friend-Funktion, die nicht Mitglied ist und in der Klasse definiert ist wird automatisch eingebunden "?

    
Molly P 24.11.2016, 20:00
quelle

1 Antwort

11

jede Funktion, die innerhalb einer Klasse definiert ist (Mitglied oder Nicht-Mitglied), ist immer implizit inline. Das liegt daran, dass Klassendefinitionen im Allgemeinen in Header-Dateien enthalten sind und keine nichtlinearen Funktionsdefinitionen in einer Header-Datei gewünscht sind (eine nichtlineare Funktion in einem Header führt zu mehreren Definitionen, wenn der Header in mehr als einem enthalten ist) Quelldatei).

Wenn Sie möchten, dass eine Funktion nicht inline ist, müssen Sie sie außerhalb einer Klassendefinition definieren. Wenn es ein Mitglied oder ein Freund ist, müssen Sie es noch innerhalb der Klasse deklarieren, da Mitglieder und Freunde müssen in der Klasse deklariert werden müssen. Sie wollen es nur nicht in der Klasse definiert.

Dies alles kommt in den Unterschied zwischen einer Definition und einer Deklaration in C ++ - sie sind zwei verschiedene Dinge, obwohl jede Definition auch implizit eine Deklaration ist, nicht jede Deklaration ist eine Definition. Wenn die Spezifikation "Deklaration" lautet, bedeutet das oft "Deklaration, die nicht auch eine Definition ist"

    
Chris Dodd 24.11.2016, 20:12
quelle

Tags und Links