2013-02-20 10 views
10

In C und C++, was ist der Vorteil einer lokalen const Variable static? Angenommen, die Initialisierung verwendet keine anderen Variablen. Gibt es einen Unterschied zwischen dem Beibehalten des Werts zwischen den Aufrufen und dem Festlegen des gleichen konstanten Werts für jeden Aufruf?C/C++ Der Zweck der statischen const lokalen Variablen

Könnte ein gültiger C-Compiler die static ignorieren?

In C++ vermeidet es den Aufbau/die Zerstörung zwischen Anrufen, aber könnte es einen anderen Nutzen geben?

+1

Im Gegensatz zu was - zu "const", zu "statisch", oder zu überhaupt keinen Modifikatoren? – MathSquared

+0

Ich habe gerade die Frage bearbeitet. Angenommen die var ist eigentlich const. – yukon

+2

Vielleicht finden Sie, was Sie hier brauchen: http://StackOverflow.com/Questions/3709207/C-Semantics-of-static-const-VS-Const – Carl

Antwort

6

Es dauert Stack-Raum nicht auf einen Vorteil sein kann, wenn Sie so etwas wie haben:

static const double table[fairly_large_number] = { .... }; 

Offensichtlich, dass Kosten für den Bau auch erheblich sein kann ausreichen, wenn die Funktion eine Menge genannt wird, gibt es guter Wert nur einmal das Objekt zu konstruieren.

+0

Ihr Punkt über die Aufnahme von Stack-Speicherplatz macht Sinn, bis Sie erkennen, dass es initialisiert werden muss, weil es "const" ist. Alles, was Sie in eine Quelldatei als Konstanten einfügen möchten, könnte leicht auf den Stack passen. –

+0

Hmm, das ist hilfreich. Eine andere kleine Frage, ist eine flüchtige var wahrscheinlich registriert werden? – yukon

+0

@MarkRansom: a) das hängt von der Größe des Stapels ab, b) wie viele verschiedene Dinge wie diese habe ich. Und was auch immer ich mache, die Initialisiererliste wird Teil meines Codes sein, so oder so. Wenn es sich beispielsweise um eine vom Computer generierte Tabelle von Konstanten für eine Times Roman-Schriftart handelt, die ich in meinem Textverarbeitungsprogramm fest codieren möchte, wäre das keine gute Sache, wenn der Stapel auf den Stapel gelegt wird ziemlich groß. Ich habe tatsächlich Code geschrieben, der große Tabellen enthält, weil das mehr Sinn macht, als Code in dem Programm zu haben, um die Tabellen zu erstellen. –

2

Ja, und es ist riesig: a semantische profitieren.

Wenn Sie const setzen, meinen Sie nicht nur, dass der Compiler die Variable nicht ändern darf. Sie geben demjenigen, der den Code später liest, eine mutigere Erklärung: Dies wird sich niemals ändern. Nicht einmal durch einen Nebeneffekt, bei dem Sie diese Variable als Zeiger auf eine andere Funktion angeben.

Der Compiler kann diese neuen Informationen auch nutzen und in einigen Situationen optimieren, je nachdem, um welchen Typ es sich handelt.

(klar sein, ich bin hier über const vs. sprechen non-const, nicht static gegen non-static.)

bearbeiten: This SO answer ist auch sehr informativ.

Verwandte Themen