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-idattribute-specifier-seqZdecydować
noptr-declarator parameters-and-qualifiers
noptr-declarator[constant-expressionopt opt opt]attribute-specifier-seq
( ptr-declarator )
parameters-and-qualifiers:
(parameter-declaration-clause)cv-qualifier-seqZdecydować
ref-qualifieropt optnoexcept-specifierattribute-specifier-seq
trailing-return-type:
-> type-id
ptr-operator:
*attribute-specifier-seqopt opt optcv-qualifier-seq
&attribute-specifier-seqZdecydować
&&attribute-specifier-seqZdecydować
nested-name-specifier*attribute-specifier-seqopt opt optcv-qualifier-seq
cv-qualifier-seq:
cv-qualifiercv-qualifier-seqZdecydować
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 constprogramu , zobacz następujące artykuły:

Zobacz też

Słowa kluczowe