Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn eine Datendeklaration geändert wird, gibt das const Schlüsselwort an, dass das Objekt oder die Variable nicht geändert werden kann.
Syntax
declarator:
ptr-declarator
noptr-declaratorparameters-and-qualifierstrailing-return-type
ptr-declarator:
noptr-declarator
ptr-operatorptr-declarator
noptr-declarator:
declarator-idattribute-specifier-seqoptieren
noptr-declaratorparameters-and-qualifiers
noptr-declarator[constant-expressionoptieren]attribute-specifier-seqoptieren
(ptr-declarator)
parameters-and-qualifiers:
(parameter-declaration-clause)cv-qualifier-seqoptieren
ref-qualifieroptierennoexcept-specifieroptierenattribute-specifier-seqoptieren
trailing-return-type:
->type-id
ptr-operator:
*attribute-specifier-seqoptierencv-qualifier-seqoptieren
&attribute-specifier-seqoptieren
&&attribute-specifier-seqoptieren
nested-name-specifier*attribute-specifier-seqoptierencv-qualifier-seqoptieren
cv-qualifier-seq:
cv-qualifiercv-qualifier-seqoptieren
cv-qualifier:
const
volatile
ref-qualifier:
&
&&
declarator-id:
...wählenid-expression
const-Werte
Das const Schlüsselwort gibt an, dass der Wert einer Variablen konstant ist, und weist den Compiler an, den Programmierer daran zu hindern, ihn zu ändern.
// 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äprozessordirektive verwenden, um Konstantenwerte zu definieren. Werte, die definiert const sind, unterliegen der Typüberprüfung und können anstelle von Konstantenausdrücken verwendet werden. In C++ können Sie die Größe eines Arrays mit einer const Variablen wie folgt angeben:
// constant_values2.cpp
// compile with: /c
const int maxarray = 255;
char store_char[maxarray]; // allowed in C++; not allowed in C
In C werden konstanten Werte standardmäßig für externe Verknüpfungen verwendet, sodass sie nur in Quelldateien angezeigt werden können. In C++ werden konstanten Werte standardmäßig für interne Verknüpfungen verwendet, sodass sie in Headerdateien angezeigt werden können.
Das const Schlüsselwort kann auch in Zeigerdeklarationen verwendet werden.
// constant_values3.cpp
int main() {
char this_char{'a'}, that_char{'b'};
char *mybuf = &this_char, *yourbuf = &that_char;
char *const aptr = mybuf;
*aptr = 'c'; // OK
aptr = yourbuf; // C3892
}
Ein Zeiger auf eine Variable, die deklariert wird, const kann nur einem Zeiger zugewiesen werden, der ebenfalls als constdeklariert wird.
// 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
}
Sie können Zeiger verwenden, um Daten als Funktionsparameter zu konstanten, um zu verhindern, dass die Funktion einen Parameter ändert, der über einen Zeiger übergeben wird.
Bei Objekten, die als constdeklariert werden, können Sie nur konstanten Memberfunktionen aufrufen. Der Compiler stellt sicher, dass das Konstantenobjekt nie geändert wird.
birthday.getMonth(); // Okay
birthday.setMonth( 4 ); // Error
Sie können konstanten oder nicht konstanten Memberfunktionen für ein nichtkonstantes Objekt aufrufen. Sie können eine Memberfunktion auch überladen, indem Sie das const Schlüsselwort verwenden. Mit diesem Feature kann eine andere Version der Funktion für konstante und nichtkonstante Objekte aufgerufen werden.
Sie können Konstruktoren oder Destruktoren nicht mit dem const Schlüsselwort deklarieren.
const Memberfunktionen
Durch das Deklarieren einer Memberfunktion mit dem const Schlüsselwort wird angegeben, dass es sich bei der Funktion um eine schreibgeschützte Funktion handelt, die das Objekt, für das es aufgerufen wird, nicht ändert. Eine Konstante Memberfunktion kann keine nicht statischen Datenmember ändern oder Memberfunktionen aufrufen, die nicht konstant sind. Um eine konstante Memberfunktion zu deklarieren, platzieren Sie das const Schlüsselwort nach der schließenden Klammer der Argumentliste. Das const Schlüsselwort ist sowohl in der Deklaration als auch in der Definition erforderlich.
// constant_member_function.cpp
class Date
{
public:
Date( int mn, int dy, int yr );
int getMonth() const; // A read-only function
void setMonth( int mn ); // A write function; can't be const
private:
int month;
};
int Date::getMonth() const
{
return month; // Doesn't modify anything
}
void Date::setMonth( int mn )
{
month = mn; // Modifies data member
}
int main()
{
Date MyDate( 7, 4, 1998 );
const Date BirthDate( 1, 18, 1953 );
MyDate.setMonth( 4 ); // Okay
BirthDate.getMonth(); // Okay
BirthDate.setMonth( 4 ); // C2662 Error
}
Unterschiede zwischen C und C++ const
Wenn Sie eine const Variable in einer C-Quellcodedatei definieren, gehen Sie wie folgt vor:
const int i = 2;
Sie können diese Variable dann wie folgt in einem anderen Modul verwenden:
extern const int i;
Um jedoch das gleiche Verhalten in C++ zu erhalten, müssen Sie die const Variable wie:
extern const int i = 2;
Ähnlich wie C können Sie diese Variable dann wie folgt in einem anderen Modul verwenden:
extern const int i;
Wenn Sie eine extern Variable in einer C++-Quellcodedatei für die Verwendung in einer C-Quellcodedatei definieren möchten, verwenden Sie Folgendes:
extern "C" const int x=10;
um zu verhindern, dass der Name vom C++-Compiler geglingt wird.
Bemerkungen
Wenn Sie der Parameterliste einer Memberfunktion folgen, gibt das const Schlüsselwort an, dass die Funktion das Objekt, für das sie aufgerufen wird, nicht ändert.
Weitere Informationen finden Sie in constden folgenden Artikeln: