Was ist der Unterschied zwischen static constund 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 constund 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 iObjekt 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 ...
constnichts mit C ++ zu tun const.
staticBestimmt 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.
staticaußerhalb einer Funktion bedeutet, dass der Bereich des markierten Symbols staticauf diese .c-Datei beschränkt ist und außerhalb dieser nicht angezeigt werden kann.
Technisch gesehen (wenn Sie dies nachschlagen möchten) staticist es ein Speicherspezifizierer und constein 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.
foodie Variable bei jedem my_function()Aufruf neu initialisiert wird, wird ein anderer Zufallswert zugewiesen. Im Fall von barder 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.
barda rand()keine Kompilierungszeitkonstante vorliegt .