Konstantenwerte
Das const-Schlüsselwort gibt an, dass der Wert einer Variablen konstant ist, und weist den Compiler an, eine Änderung des Werts durch den Programmierer zu verhindern.
// constant_values1.cpp
int main() {
const int i = 5;
i = 10; // C3892
i++; // C2105
}
In C++ können Sie das const-Schlüsselwort anstelle der #define-Präprozessordirektiven verwenden, um konstante Werte zu definieren. Werte, die mit const definiert werden, unterliegen der Typüberprüfung und können anstelle von konstanten Ausdrücken verwendet werden. In C++ können Sie die Größe eines Arrays mit einer const-Variablen angeben:
// constant_values2.cpp
// compile with: /c
const int maxarray = 255;
char store_char[maxarray]; // allowed in C++; not allowed in C
In C erhalten konstante Werte standardmäßig den Wert einer externen Bindung. Daher können sie nur in den Quelldateien stehen. In C++ erhalten konstante Werte standardmäßig den Wert einer internen Bindung, daher können sie in den Headerdateien angezeigt werden.
Das const-Schlüsselwort kann auch in Zeigerdeklarationen verwendet werden.
// constant_values3.cpp
int main() {
char *mybuf = 0, *yourbuf;
char *const aptr = mybuf;
*aptr = 'a'; // OK
aptr = yourbuf; // C3892
}
Ein Zeiger auf eine Variable, die als const deklariert ist, kann nur einem Zeiger zugewiesen werden, der auch als const deklariert ist.
// constant_values4.cpp
#include <stdio.h>
int main() {
const char *mybuf = "test";
char *yourbuf = "test2";
printf_s("%s\n", mybuf);
const char *bptr = mybuf; // Pointer to constant data
printf_s("%s\n", bptr);
// *bptr = 'a'; // Error
}
Ausgabe
test
test
Sie können Zeiger auf konstante Daten als Funktionsparameter verwenden, um zu verhindern, dass die Funktion einen Parameter ändert, der über einen Zeiger übergeben wird.
Für Objekte, die als const deklariert sind, können Sie nur konstante Memberfunktionen aufrufen. Dadurch wird sichergestellt, dass das konstante Objekt nie geändert wird.
birthday.getMonth(); // Okay
birthday.setMonth( 4 ); // Error
Sie können für ein nicht konstantes Objekt konstante oder nicht konstante Memberfunktionen aufrufen. Zudem können Sie eine Memberfunktion mit dem const-Schlüsselwort überladen. Dadurch kann für konstante und nicht konstante Objekte jeweils eine andere Version der Funktion aufgerufen werden.
Sie können Konstruktoren oder Destruktoren nicht mit dem const-Schlüsselwort deklarieren.
Unterschiede bei const in C und C++
Wenn Sie eine Variable in einer C-Quellcodedatei als const deklarieren, gehen Sie wie folgt vor:
const int i = 2;
Sie können diese Variable dann in einem anderen Modul wie folgt verwenden:
extern const int i;
Um jedoch das gleiche Verhalten in C++ abzurufen, müssen Sie die const-Variable als deklarieren:
extern const int i = 2;
Wenn Sie eine extern-Variable in einer C++-Quellcodedatei für die Verwendung in einer C-Quellcodedatei deklarieren möchten, verwenden Sie:
extern "C" const int x=10;
um die Namenszerlegung durch den C++-Compiler zu verhindern.