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-id
attribute-specifier-seq
Tercih
noptr-declarator
parameters-and-qualifiers
noptr-declarator
[
constant-expression
tercih et]
attribute-specifier-seq
(
ptr-declarator
)
parameters-and-qualifiers
:
(
parameter-declaration-clause
)
cv-qualifier-seq
Tercih
ref-qualifier
optnoexcept-specifier
opt optattribute-specifier-seq
trailing-return-type
:
->
type-id
ptr-operator
:
*
attribute-specifier-seq
tercih etcv-qualifier-seq
&
attribute-specifier-seq
Tercih
&&
attribute-specifier-seq
Tercih
nested-name-specifier
*
attribute-specifier-seq
tercih etcv-qualifier-seq
cv-qualifier-seq
:
cv-qualifier
cv-qualifier-seq
Tercih
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 const
da 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 const
bildirilen 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 const
daha fazla bilgi için aşağıdaki makalelere bakın:
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin