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 eins über das andere verwenden?
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 eins über das andere verwenden?
Antworten:
Der Unterschied ist die Verknüpfung.
// 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 Bezeichner deklarieren static
.
Dies ermöglicht dem Compiler (möglicherweise) weitere Optimierungen und informiert den Leser, dass das Objekt nicht außerhalb seiner Übersetzungseinheit verwendet wird.
const int i = 5;
externe Verknüpfung hat? In C ++ nicht ...
const
nichts mit C ++ zu tun const
.
static
Bestimmt die Sichtbarkeit außerhalb einer Funktion oder die Lebensdauer einer Variablen innerhalb. Es hat also nichts mit sich selbst zu tun const
.
const
bedeutet, dass Sie den Wert nach der Initialisierung nicht ändern.
static
Innerhalb einer Funktion bedeutet dies, dass die Variable vor und nach dem Ende der Funktion vorhanden ist.
static
außerhalb einer Funktion bedeutet, dass der Bereich des markierten Symbols static
auf diese .c-Datei beschränkt ist und außerhalb dieser nicht angezeigt werden kann.
Technisch gesehen (wenn Sie dies nachschlagen möchten) static
ist es ein Speicherspezifizierer und const
ein Typqualifizierer.
const int i = 5;
i-Wert, den Sie mithilfe eines Zeigers ändern können, wenn i lokal definiert und deklariert ist, wenn er statisch ist const int a = 5; oder const int i = 5; Global können Sie keine Änderungen vornehmen, da diese im RO-Speicher des Datensegments gespeichert sind.
#include <stdio.h>
//const int a=10; /* can not modify */
int main(void) {
// your code goes here
//static const int const a=10; /* can not modify */
const int a=10;
int *const ptr=&a;
*ptr=18;
printf("The val a is %d",a);
return 0;
}
Es hängt davon ab, ob sich diese Definitionen innerhalb einer Funktion befinden oder nicht. Die Antwort für den Fall außerhalb einer Funktion wird oben von ouah gegeben. Innerhalb einer Funktion ist der Effekt unterschiedlich, wie im folgenden Beispiel dargestellt:
#include <stdlib.h>
void my_function() {
const int foo = rand(); // Perfectly OK!
static const int bar = rand(); // Compile time error.
}
Wenn eine lokale Variable "wirklich konstant" sein soll, müssen Sie sie nicht nur "const", sondern auch "static const" definieren.
foo
die Variable bei jedem my_function()
Aufruf neu initialisiert wird, wird ein anderer Zufallswert zugewiesen. Im Fall von bar
der nur einmal initialisiert Variable, das erste Mal my_function()
aufgerufen wird in der gleichen Wert , der sich für die Laufzeit des Programms zugewiesen werden. Daher statische Speicherdauer.
bar
da rand()
keine Kompilierungszeitkonstante vorliegt .