wake-up-neo.net

Was ist der Unterschied zwischen statischem const und const?

Was ist der Unterschied zwischen static const und const? Zum Beispiel:

static const int a=5;
const int i=5;

Gibt es einen Unterschied zwischen ihnen? Wann würden Sie eine über der anderen verwenden?

42
Lior

Der Unterschied ist die Verbindung.

// At file scope
static const int a=5;  // internal linkage
const int i=5;         // external linkage

Wenn das i-Objekt nicht außerhalb der Übersetzungseinheit verwendet wird, in der es definiert ist, sollten Sie es mit dem static-Bezeichner deklarieren.

Dadurch kann der Compiler (möglicherweise) weitere Optimierungen durchführen und informiert den Leser, dass das Objekt nicht außerhalb seiner Übersetzungseinheit verwendet wird.

42
ouah

statisch bestimmt die Sichtbarkeit außerhalb einer Funktion oder einer Variablenlebensdauer. Es hat also nichts mit const per se zu tun.

const bedeutet, dass Sie den Wert nicht ändern, nachdem er initialisiert wurde.

statisch in einer Funktion bedeutet, dass die Variable vor und nach dem Ende der Funktion existiert.

statisch außerhalb einer Funktion bedeutet, dass der Gültigkeitsbereich des als statisch gekennzeichneten Symbols auf diese .c-Datei beschränkt ist und außerhalb dieser Funktion nicht sichtbar ist.

Technisch gesehen (wenn Sie dies nachschlagen möchten) ist statisch ein Speicherspezifizierer und const ein Typqualifizierer.

64
Joe

Es hängt davon ab, ob diese Definitionen in einer Funktion enthalten sind oder nicht. Die Antwort für den Fall outside a function wird oben von ouah gegeben. Innerhalb einer Funktion ist der Effekt anders, veranschaulicht durch das folgende Beispiel:

#include <stdlib.h>

void my_function() {
  const int foo = Rand();         // Perfectly OK!
  static const int bar = Rand();  // Compile time error.
}

Wenn Sie möchten, dass eine lokale Variable "wirklich konstant" ist, müssen Sie nicht nur "const", sondern "statische const" definieren.

0
nibot