Bagikan melalui


const (C++)

Saat memodifikasi deklarasi data, const kata kunci menentukan bahwa objek atau variabel tidak dapat dimodifikasi.

Sintaksis

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 Memilih
noptr-declarator parameters-and-qualifiers
noptr-declarator [ constant-expression Memilih]attribute-specifier-seqMemilih
( ptr-declarator )
parameters-and-qualifiers:
( parameter-declaration-clause ) cv-qualifier-seq Memilih
ref-qualifier Memilihnoexcept-specifierMemilihattribute-specifier-seqMemilih
trailing-return-type:
-> type-id
ptr-operator:
* attribute-specifier-seq Memilihcv-qualifier-seqMemilih
& attribute-specifier-seq Memilih
&& attribute-specifier-seq Memilih
nested-name-specifier * attribute-specifier-seq Memilihcv-qualifier-seqMemilih
cv-qualifier-seq:
cv-qualifier cv-qualifier-seq Memilih
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:

Lihat juga

Kata kunci