Es ist üblich, eine Funktion zu deklarieren (z. B. in einem Header) und sie später zu definieren (z. B. in einer Quelldatei).C++ Funktionsmodifikatoren im Header oder in der Quelle? Kurzreferenz
Immer wenn ich einen Modifizierer (z. B. statisch, inline, const, extern, Standardargumente, etc.) auf eine Funktion anwenden muss, kann ich mich nie erinnern, ob es in der Deklaration, der Definition oder beiden gehen sollte.
Zum Beispiel von dem, was ich sagen kann, kann Argumente const
in entweder eine oder beide sein die Erklärung und Definition, Funktionen müssen const
in sowohl die Erklärung und Definition sein, müssen Funktionen static
sein nur in der Erklärung und so weiter.
Können Sie eine kurze Referenzliste aller möglichen Funktionsmodifikatoren bereitstellen, und ob diese in der Deklaration, der Definition oder beiden zugewiesen werden sollen? Viele der Einzelfälle scheinen schon einmal auf dieser Seite gestellt worden zu sein, daher wäre es schön, diese Antworten zu bündeln. Gibt es alternativ Faustregeln, um herauszufinden, wo Modifikatoren angewendet werden?
Wenn ich mich richtig erinnere, geht alles und alles, was * Teil der Funktionssignatur * ist, in beide Dateien. – CinCout
So weit wie const geht, muss es sowohl in der Deklaration als auch in der Definition sein, sonst wird es als eine andere Überladung betrachtet. Das Gleiche gilt nicht für den Inline-Modifikator. Sie können eine Deklaration und Definition in derselben Headerdatei haben und nur die Definition muss ein Inline-Schlüsselwort haben. – rozina
@ tobi303 Ich fürchte du liegst falsch. Das Argument 'const' ist von Funktionssignaturen ausgenommen und sollte bei der Deklaration nicht const sein. Der Grund ist, dass, wenn Sie später entscheiden, ihre 'const'-Qualifikation in der Definition zu ändern (zB um sie als Schleifenzähler wiederzuverwenden), müssen Sie die Kopfzeile nicht aktualisieren, und so Ihre Kunden (einschließlich sich selbst) don Ich muss nicht alle ihre Dateien neu kompilieren, die sie enthalten. "const" eines Referenten _ist_ Materie, aber das ist nicht mit dem Argument (d. h. lokale Variable) selbst verwandt. –