2016-04-15 3 views
1

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 staticsein 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?

+0

Wenn ich mich richtig erinnere, geht alles und alles, was * Teil der Funktionssignatur * ist, in beide Dateien. – CinCout

+1

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

+0

@ 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. –

Antwort

0

Eine mögliche Faustregel für eine Deklaration in der Kopfzeile und eine Definition in einer Quelldatei wäre -> Wenn der Modifikator jede Quelle beeinflussen soll, die die Funktion verwendet, dann lege sie in die Kopfzeile. Und meistens möchten Sie alle Quelldateien beeinflussen.

Jedoch gibt es wirklich keine allgemeine Regel. Sie müssen verstehen, was jeder Modifikator macht, und dann wissen Sie genau, warum er in einer Header-Datei oder in einer Quelldatei oder in beiden geschrieben ist.

+0

Nein, es gibt spezifische Regeln für verschiedene Aspekte von Funktionen, in Bezug darauf, wo sie deklariert werden können und müssen und welche Auswirkungen sie haben. Es ist selten nur eine persönliche Entscheidung, wie du es hier andeuten willst. –

Verwandte Themen