Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Saat memodifikasi deklarasi data, const kata kunci menentukan bahwa objek atau variabel tidak dapat dimodifikasi.
Sintaksis
declarator:
ptr-declarator
noptr-declaratorparameters-and-qualifierstrailing-return-type
ptr-declarator:
noptr-declarator
ptr-operatorptr-declarator
noptr-declarator:
declarator-idattribute-specifier-seqMemilih
noptr-declaratorparameters-and-qualifiers
noptr-declarator[constant-expressionMemilih]attribute-specifier-seqMemilih
(ptr-declarator)
parameters-and-qualifiers:
(parameter-declaration-clause)cv-qualifier-seqMemilih
ref-qualifierMemilihnoexcept-specifierMemilihattribute-specifier-seqMemilih
trailing-return-type:
->type-id
ptr-operator:
*attribute-specifier-seqMemilihcv-qualifier-seqMemilih
&attribute-specifier-seqMemilih
&&attribute-specifier-seqMemilih
nested-name-specifier*attribute-specifier-seqMemilihcv-qualifier-seqMemilih
cv-qualifier-seq:
cv-qualifiercv-qualifier-seqMemilih
cv-qualifier:
const
volatile
ref-qualifier:
&
&&
declarator-id:
...Memilihid-expression
const Nilai
Kata const kunci menentukan bahwa nilai variabel konstan dan memberi tahu pengkompilasi untuk mencegah programmer memodifikasinya.
// constant_values1.cpp
int main() {
const int i = 5;
i = 10; // C3892
i++; // C2105
}
Di C++, Anda dapat menggunakan const kata kunci alih-alih #define direktif prapemrosan untuk menentukan nilai konstanta. Nilai yang ditentukan dengan const tunduk pada pemeriksaan jenis, dan dapat digunakan sebagai pengganti ekspresi konstanta. Di C++, Anda dapat menentukan ukuran array dengan const variabel sebagai berikut:
// constant_values2.cpp
// compile with: /c
const int maxarray = 255;
char store_char[maxarray]; // allowed in C++; not allowed in C
Di C, nilai konstanta default ke linkage eksternal, sehingga hanya dapat muncul di file sumber. Di C++, nilai konstanta default ke tautan internal, yang memungkinkannya muncul dalam file header.
Kata const kunci juga dapat digunakan dalam deklarasi penunjuk.
// 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
}
Penunjuk ke variabel yang dideklarasikan sebagai const dapat ditetapkan hanya ke penunjuk yang juga dinyatakan sebagai 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
}
Anda dapat menggunakan penunjuk ke data konstan sebagai parameter fungsi untuk mencegah fungsi memodifikasi parameter yang diteruskan melalui pointer.
Untuk objek yang dideklarasikan sebagai const, Anda hanya dapat memanggil fungsi anggota konstanta. Pengkompilasi memastikan bahwa objek konstanta tidak pernah dimodifikasi.
birthday.getMonth(); // Okay
birthday.setMonth( 4 ); // Error
Anda dapat memanggil fungsi anggota konstanta atau non-konstanta untuk objek non-konstanta. Anda juga dapat membebani fungsi anggota menggunakan const kata kunci; fitur ini memungkinkan versi fungsi yang berbeda untuk dipanggil untuk objek konstanta dan non-konstan.
Anda tidak dapat mendeklarasikan konstruktor atau destruktor dengan const kata kunci.
const fungsi anggota
Mendeklarasikan fungsi anggota dengan const kata kunci menentukan bahwa fungsi adalah fungsi "baca-saja" yang tidak mengubah objek yang disebutnya. Fungsi anggota konstanta tidak dapat mengubah anggota data non-statis atau memanggil fungsi anggota apa pun yang tidak konstan. Untuk mendeklarasikan fungsi anggota konstanta, tempatkan const kata kunci setelah kurung tutup daftar argumen. Kata const kunci diperlukan dalam deklarasi dan definisi.
// 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
}
Perbedaan C dan C++ const
Saat Anda menentukan const variabel dalam file kode sumber C, Anda melakukannya sebagai:
const int i = 2;
Anda kemudian dapat menggunakan variabel ini dalam modul lain sebagai berikut:
extern const int i;
Tetapi untuk mendapatkan perilaku yang sama di C++, Anda harus menentukan variabel Anda const sebagai:
extern const int i = 2;
Mirip dengan C, Anda kemudian dapat menggunakan variabel ini dalam modul lain sebagai berikut:
extern const int i;
Jika Anda ingin menentukan extern variabel dalam file kode sumber C++ untuk digunakan dalam file kode sumber C, gunakan:
extern "C" const int x=10;
untuk mencegah mangling nama oleh pengkompilasi C++.
Komentar
Saat mengikuti daftar parameter fungsi anggota, const kata kunci menentukan bahwa fungsi tidak mengubah objek yang dipanggilnya.
Untuk informasi selengkapnya tentang const, lihat artikel berikut ini: