const (C++)

Bir veri bildirimini değiştirdiğinde, const anahtar sözcüğü nesnenin veya değişkenin değiştirilebilir olmadığını belirtir.

Sözdizimi

declarator:
ptr-declarator
noptr-declarator parameters-and-qualifiers trailing-return-type
ptr-declarator:
noptr-declarator
ptr-operator ptr-declarator
noptr-declarator:
declarator-idattribute-specifier-seqTercih
noptr-declarator parameters-and-qualifiers
noptr-declarator[constant-expressiontercih et]attribute-specifier-seq
( ptr-declarator )
parameters-and-qualifiers:
(parameter-declaration-clause)cv-qualifier-seqTercih
ref-qualifieroptnoexcept-specifieropt optattribute-specifier-seq
trailing-return-type:
-> type-id
ptr-operator:
*attribute-specifier-seqtercih etcv-qualifier-seq
&attribute-specifier-seqTercih
&&attribute-specifier-seqTercih
nested-name-specifier*attribute-specifier-seqtercih etcv-qualifier-seq
cv-qualifier-seq:
cv-qualifiercv-qualifier-seqTercih
cv-qualifier:
const
volatile
ref-qualifier:
&
&&
declarator-id:
...Tercihid-expression

const Değer

const anahtar sözcüğü bir değişkenin değerinin sabit olduğunu belirtir ve derleyiciye programcının bunu değiştirmesini engellemesini söyler.

// constant_values1.cpp
int main() {
   const int i = 5;
   i = 10;   // C3892
   i++;   // C2105
}

C++'ta, sabit değerleri tanımlamak için önişlemci yönergesi yerine #define anahtar sözcüğünü kullanabilirsinizconst. ile const tanımlanan değerler tür denetimine tabidir ve sabit ifadeler yerine kullanılabilir. C++'ta bir dizinin boyutunu aşağıdaki gibi bir const değişkenle belirtebilirsiniz:

// constant_values2.cpp
// compile with: /c
const int maxarray = 255;
char store_char[maxarray];  // allowed in C++; not allowed in C

C'de, sabit değerler varsayılan olarak dış bağlantıdır, böylece bunlar yalnızca kaynak dosyalarda görünebilir. C++ dilinde sabit değerler varsayılan olarak iç bağlantı olarak kullanılır ve bu da üst bilgi dosyalarında görünmelerini sağlar.

Anahtar const sözcüğü işaretçi bildirimlerinde de kullanılabilir.

// 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
}

olarak const bildirilen bir değişken işaretçisi, yalnızca olarak constda bildirilen bir işaretçiye atanabilir.

// 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
}

İşlevin işaretçi aracılığıyla geçirilen bir parametreyi değiştirmesini önlemek için, sabit verileri işlev parametreleri olarak işaretçiler kullanabilirsiniz.

olarak constbildirilen nesneler için yalnızca sabit üye işlevlerini çağırabilirsiniz. Derleyici, sabit nesnenin hiçbir zaman değiştirilmemesini sağlar.

birthday.getMonth();    // Okay
birthday.setMonth( 4 ); // Error

Sabit olmayan bir nesne için sabit veya sabit olmayan üye işlevlerini çağırabilirsiniz. Ayrıca, anahtar sözcüğünü const kullanarak bir üye işlevini aşırı yükleyebilirsiniz; bu özellik işlevin farklı bir sürümünün sabit ve sabit olmayan nesneler için çağrılmasını sağlar.

Oluşturucuları veya yıkıcıları anahtar sözcüğüyle const bildiremezsiniz.

const üye işlevleri

Bir üye işlevini anahtar sözcüğüyle const bildirmek, işlevin çağrıldığı nesneyi değiştirmeyen "salt okunur" bir işlev olduğunu belirtir. Sabit üye işlevi statik olmayan veri üyelerini değiştiremez veya sabit olmayan üye işlevlerini çağıramaz. Sabit üye işlevi bildirmek için, anahtar sözcüğü bağımsız değişken listesinin kapanış parantezinin arkasına yerleştirin const . Anahtar const sözcüğü hem bildirimde hem de tanımda gereklidir.

// 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
}

C ve C++ const farkları

C kaynak kodu dosyasında bir const değişken tanımladığınızda, bunu şöyle yaparsınız:

const int i = 2;

Daha sonra bu değişkeni aşağıdaki gibi başka bir modülde kullanabilirsiniz:

extern const int i;

Ancak C++'ta aynı davranışı elde etmek için değişkeninizi şu şekilde tanımlamanız const gerekir:

extern const int i = 2;

C'ye benzer şekilde, bu değişkeni başka bir modülde aşağıdaki gibi kullanabilirsiniz:

extern const int i;

C++ kaynak kodu dosyasında C kaynak kodu dosyasında kullanmak üzere bir extern değişken tanımlamak istiyorsanız şunu kullanın:

extern "C" const int x=10;

C++ derleyicisi tarafından ad mangling önlemek için.

Açıklamalar

Bir üye işlevinin parametre listesini takip ederken anahtar sözcüğü, const işlevin çağrıldığı nesneyi değiştirmediğini belirtir.

hakkında constdaha fazla bilgi için aşağıdaki makalelere bakın:

Ayrıca bkz.

Anahtar Sözcükler