Erklären Sie zunächst die Variable const in C und die Variable const in C++, die keine echte Konstante ist. Sie teilt dem Compiler lediglich mit, dass die Variable nicht auf der linken Seite des Zuweisungssymbols erscheinen kann. Letzteres C++ entwickelt const auf Basis von C weiter.
const
in C-Sprache: const
Die geänderte Variable ist schreibgeschützt und das Wesentliche ist immer noch eine Variable
const
Die geänderten lokalen Variablen reservieren Speicherplatz auf dem Stapel
const
Die geänderten globalen Variablen reservieren Speicherplatz im schreibgeschützten Speicherbereich
const
ist nur zur Kompilierungszeit nützlich, nicht zur Laufzeit gültig
const
Kann keine echten Konstanten definieren
const
Die geänderte Variable ist keine echte Konstante, sie teilt dem Compiler lediglich mit, dass die Variable nicht auf der linken Seite des Zuweisungssymbols erscheinen darf. const
Lokale Variablen weisen Speicherplatz auf dem Stapel zu, und der Wert in diesem Speicherplatz kann über einen Zeiger geändert werden. Nach dem Kompilierungszeitraum sind die konstanten Eigenschaften und schreibgeschützten Eigenschaften von const
-Variablen nicht mehr gültig. Die schreibgeschützten Eigenschaften sind nur während des Kompilierungszeitraums gültig und haben zur Laufzeit keine Auswirkung. Die durch const
geänderte globale Variable weist Platz im schreibgeschützten Speicherbereich zu. Wenn daher ein Zeiger zum Ändern der durch const
geänderten globalen Variablen verwendet wird, stürzt das Programm ab, da der Inhalt des Programms schreibgeschützt ist Wenn der Speicherbereich geändert wird, wird dies bei den meisten Programmen der Fall sein. Es ist ein Absturz aufgetreten.
const
in C++: C++ hat sich const
auf der Basis von C entwickelt, wie gezeigt in:
const
Platzieren Sie bei der Deklaration Konstanten in der Symboltabelle
Während des Kompilierungsprozesses wird festgestellt, dass die Konstanten direkt durch Werte in der Symboltabelle ersetzt werden (Konstantenfaltung)
Es ist auch möglich, während des Kompilierungsprozesses Speicherplatz für die entsprechenden Konstanten zuzuweisen:
const
wird global verwendet oder die Die Beschreibung des Schlüsselworts static
wird verwendet und im schreibgeschützten Datenbereich
extern const int i = 10; static const int i = 10; // 或者修饰全局变量 const int a =10; int main() {}
gespeichert. Lokale Variablen verwenden den Operator const
für die Konstante &
und weisen Platz im Stapel zu Bereich
Hinweis: Obwohl der C++-Compiler möglicherweise Speicherplatz fürconst
Konstanten zuweist, verwendet er den Wert in seinem Speicherplatz nicht.Die Symboltabelle ist ein Datenwert Struktur, die während des Kompilierungsprozesses generiert wird
#include <iostream> #include <string> using namespace std; const int i = 10; // 如果通过指针去改变i,就会出现段错误:尝试修改只读数据区数据 int main() { const int a = 5; int *p = (int *)&a; // &a, 给a标识符分配空间了,并用p指向了该空间, // 可以通过*p访问这个地址,但是不能通过a来访问 *p = 10; // 不能通过指针去改变a的值 cout << a << endl; cout << *p << endl; return 0; }
Die const
-Konstante in C++ ähnelt der Makrodefinition
const int c = 5; // 类似于 #define c 5
, aber die Der Unterschied zwischen cosnt
und der Makrodefinition ist:
const
Konstanten werden vom Compiler verarbeitet
Der Compiler führt Typprüfung und Gültigkeitsbereich durch Überprüfen von cosnt
-Konstanten
Die Makrodefinition wird vom Präprozessor verarbeitet und ist nur eine einfache Textersetzung
#include <stdio.h> void f() { #define a 3 const int b = 4; } void g() { printf("a = %d\n", a); // 在g函数中访问f函数中的宏定义,完全没有问题 // 在预处理的时候就进行了宏替换,对编译器来说,就是printf("a = %d\n", 3); // 宏是没有作用域的概念 // const 定义的常量,被编译器处理,是有作用域的,不能访问b printf("b = %d\n", b); } int main() { const int A = 1; const int B = 2; int array[A + B] = {0}; /* C编译 const修饰得到的只是具有只读特性的变量,数组的大小是由两个变量的大小决定的, 两个变量相加的结果需要在运行的时候才能直到,因此编译器编译的时候不知道这个数组长度,直接报错 */ /* C++编译 const是定义的真正意义上的常量,直接从符号表中取值,编译的时候就知道A和B的值, 可以得到数组的长度,不会报错 */ int i = 0; for(i=0; i<(A + B); i++) { printf("array[%d] = %d\n", i, array[i]); } f(); g(); return 0; }
Verwandte Artikel:
const in PHP Analyse des Unterschieds mit define
Verwandte Videos:
Video-Tutorial zur zugrunde liegenden PHP-Analyse
Das obige ist der detaillierte Inhalt vonAnalyse und Erklärung der allgemeinen Verwendung von const-Konstanten in C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!