const
(C++)
Podczas modyfikowania deklaracji danych słowo kluczowe określa, const
że obiekt lub zmienna nie można modyfikować.
Składnia
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
Zdecydować
noptr-declarator
parameters-and-qualifiers
noptr-declarator
[
constant-expression
opt opt opt]
attribute-specifier-seq
(
ptr-declarator
)
parameters-and-qualifiers
:
(
parameter-declaration-clause
)
cv-qualifier-seq
Zdecydować
ref-qualifier
opt optnoexcept-specifier
attribute-specifier-seq
trailing-return-type
:
->
type-id
ptr-operator
:
*
attribute-specifier-seq
opt opt optcv-qualifier-seq
&
attribute-specifier-seq
Zdecydować
&&
attribute-specifier-seq
Zdecydować
nested-name-specifier
*
attribute-specifier-seq
opt opt optcv-qualifier-seq
cv-qualifier-seq
:
cv-qualifier
cv-qualifier-seq
Zdecydować
cv-qualifier
:
const
volatile
ref-qualifier
:
&
&&
declarator-id
:
...
Zdecydowaćid-expression
const
Wartości
Słowo const
kluczowe określa, że wartość zmiennej jest stała i informuje kompilator, aby uniemożliwić programisty modyfikowanie go.
// constant_values1.cpp
int main() {
const int i = 5;
i = 10; // C3892
i++; // C2105
}
W języku C++można użyć słowa kluczowego const
#define
zamiast dyrektywy preprocesora w celu zdefiniowania wartości stałych. Wartości zdefiniowane za pomocą const
podlegają sprawdzaniu typów i mogą być używane zamiast wyrażeń stałych. W języku C++można określić rozmiar tablicy ze zmienną const
w następujący sposób:
// constant_values2.cpp
// compile with: /c
const int maxarray = 255;
char store_char[maxarray]; // allowed in C++; not allowed in C
W języku C, domyślne wartości są stałe w zewnętrznych powiązaniach, więc mogą być one wyświetlane tylko w plikach źródłowych. W języku C++, wartości stałe są domyślne wewnątrz powiązania, co pozwala im pojawiać się w plikach nagłówkowych.
Słowo const
kluczowe może być również używane w deklaracjach wskaźników.
// 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
}
Wskaźnik do zmiennej zadeklarowanej jako const
można przypisać tylko do wskaźnika, który jest również zadeklarowany jako const
.
// 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
}
Można użyć wskaźników do danych stałych, takich jak parametry funkcji, aby zapobiec modyfikowaniu parametru przekazywanego za pomocą wskaźnika funkcji.
W przypadku obiektów, które są zadeklarowane jako const
, można wywoływać tylko stałe funkcje składowe. Kompilator gwarantuje, że obiekt stały nigdy nie zostanie zmodyfikowany.
birthday.getMonth(); // Okay
birthday.setMonth( 4 ); // Error
Można wywołać funkcje stałych lub niestałych składowych dla obiektu niestałego. Funkcję składową można również przeciążyć za pomocą słowa kluczowego const
. Ta funkcja umożliwia wywoływanie innej wersji funkcji dla obiektów stałych i niestałych.
Konstruktorów ani destruktorów nie można zadeklarować za pomocą słowa kluczowego const
.
const
funkcje składowe
Deklarowanie funkcji składowej za pomocą słowa kluczowego const
określa, że funkcja jest funkcją "tylko do odczytu", która nie modyfikuje obiektu, dla którego jest wywoływana. Funkcja stałej składowej nie może modyfikować żadnych niestacjonanych elementów członkowskich ani wywoływać żadnych funkcji składowych, które nie są stałe. Aby zadeklarować funkcję stałej składowej, umieść const
słowo kluczowe po nawiasie zamykającym listy argumentów. Słowo const
kluczowe jest wymagane zarówno w deklaracji, jak i w definicji.
// 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
}
Różnice w językach C i C++ const
Podczas definiowania zmiennej const
w pliku kodu źródłowego języka C należy wykonać następujące czynności:
const int i = 2;
Tej zmiennej można następnie użyć w innym module w następujący sposób:
extern const int i;
Aby jednak uzyskać takie samo zachowanie w języku C++, musisz zdefiniować const
zmienną jako:
extern const int i = 2;
Podobnie jak w języku C, możesz następnie użyć tej zmiennej w innym module w następujący sposób:
extern const int i;
Jeśli chcesz zdefiniować zmienną extern
w pliku kodu źródłowego języka C++ do użycia w pliku kodu źródłowego języka C, użyj:
extern "C" const int x=10;
Aby zapobiec przekręcaniu nazwy przez kompilator języka C++.
Uwagi
Po wykonaniu listy parametrów funkcji składowej słowo kluczowe określa, const
że funkcja nie modyfikuje obiektu, dla którego jest wywoływany.
Aby uzyskać więcej informacji na temat const
programu , zobacz następujące artykuły:
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla