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-declarator
parameters-and-qualifiers
trailing-return-type
ptr-declarator
:
noptr-declarator
ptr-operator
ptr-declarator
noptr-declarator
:
declarator-id
attribute-specifier-seq
opt
noptr-declarator
parameters-and-qualifiers
noptr-declarator
[
constant-expression
opt]
attribute-specifier-seq
opt
(
ptr-declarator
)
parameters-and-qualifiers
:
(
parameter-declaration-clause
)
cv-qualifier-seq
opt
ref-qualifier
optnoexcept-specifier
optattribute-specifier-seq
opt
trailing-return-type
:
->
type-id
ptr-operator
:
*
attribute-specifier-seq
optcv-qualifier-seq
opt
&
attribute-specifier-seq
opt
&&
attribute-specifier-seq
opt
nested-name-specifier
*
attribute-specifier-seq
optcv-qualifier-seq
opt
cv-qualifier-seq
:
cv-qualifier
cv-qualifier-seq
opt
cv-qualifier
:
const
volatile
ref-qualifier
:
&
&&
declarator-id
:
...
optid-expression
const
-Werte
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äprozessoranweisungen 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 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 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
}
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. Der Compiler stellt sicher, 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. Durch diese Funktion 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.
const
Memberfunktionen
Die Deklaration einer Memberfunktion mit dem const
-Schlüsselwort gibt an, dass die Funktion eine "schreibgeschützte" Funktion ist, die das Objekt, für das sie 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 Schlüsselwort const
nach der schließenden Klammer der Argumentliste. Das const
-Schlüsselwort ist in der Deklaration und 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 in einem anderen Modul wie folgt verwenden:
extern const int i;
Um jedoch das gleiche Verhalten in C++ zu erhalten, müssen Sie die const
Variable wie folgt definieren:
extern const int i = 2;
Wie C, können Sie diese Variable dann in einem anderen Modul wie folgt 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:
extern "C" const int x=10;
um die Namenszerlegung durch den C++-Compiler zu verhindern.
Hinweise
Wenn das const
-Schlüsselwort auf die Parameterliste einer Memberfunktion folgt, gibt es an, dass die Funktion das Objekt nicht ändert, für das sie aufgerufen wird.
Weitere Informationen zu const
finden Sie in den folgenden Artikeln: