Mungkin Duplikat: Arti “const" lalu dalam C++ metode declaration?
Saya punya sebuah buku, di mana ada tertulis sesuatu seperti:
class Foo
{
public:
int Bar(int random_arg) const
{
// code
}
};
Apa artinya?
"const fungsi", dilambangkan dengan kata kunci const
setelah deklarasi fungsi, membuat kesalahan kompiler untuk kelas ini berfungsi untuk mengubah variabel anggota kelas. Namun, membaca kelas variabel adalah baik dalam fungsi, tetapi menulis dalam fungsi ini akan menghasilkan kesalahan kompiler.
Cara lain untuk berpikir tentang seperti "const fungsi" adalah dengan melihat kelas fungsi sebagai fungsi normal mengambil implisit ini
pointer. Jadi metode int Foo::Bar(int random_arg)
(tanpa const di akhir) hasil dalam fungsi seperti int Foo_Bar(Foo* ini, int random_arg)
, dan panggilan seperti Foo f; f.Bar(4)
akan secara internal sesuai dengan sesuatu seperti Foo f; Foo_Bar(&f, 4)
. Sekarang menambahkan const pada akhir (int Foo::Bar(int random_arg) const
) kemudian dapat dipahami sebagai pernyataan dengan const pointer ini: int Foo_Bar(const Foo* ini, int random_arg)
. Karena jenis ini
dalam kasus seperti ini const, tidak ada modifikasi dari anggota variabel yang mungkin.
Hal ini dimungkinkan untuk melonggarkan "const fungsi" pembatasan tidak memungkinkan fungsi untuk menulis untuk setiap variabel dari kelas. Untuk memungkinkan beberapa dari variabel-variabel yang akan ditulisi bahkan ketika fungsi ini ditandai sebagai "const fungsi", ini kelas variabel yang ditandai dengan kata kunci berubah
. Dengan demikian, jika sebuah variabel kelas ditandai sebagai mutable, dan "const fungsi" menulis untuk variabel ini maka kode akan mengkompilasi bersih dan variabel adalah mungkin untuk berubah. (C++11)
Seperti biasa ketika berhadapan dengan const
kata kunci, mengubah lokasi const kata kunci dalam C++ pernyataan telah sepenuhnya makna yang berbeda. Atas penggunaan const
hanya berlaku ketika menambahkan const
untuk akhir dari deklarasi fungsi setelah tanda kurung.
const
adalah sangat berlebihan kualifikasi dalam C++: sintaks dan memesan sering tidak mudah di kombinasi dengan pointer. Beberapa bacaan tentang const
kebenaran dan const
kata kunci:
Pertimbangkan dua kelas yang diketik variabel:
class Boo { ... };
Boo b0; // mutable object
const Boo b1; // non-mutable object
Sekarang anda dapat menelepon ke ada fungsi anggota dari Boo
on b0
, tapi hanya const
-anggota yang memenuhi syarat fungsi pada b1
.
Fungsi dapat't mengubah parameter melalui pointer/referensi yang anda berikan itu.
Aku pergi ke halaman ini setiap kali saya harus berpikir tentang hal ini:
http://www.parashift.com/c++-faq-lite/const-correctness.html
Saya percaya ada's juga baik bab di Meyers', "Lebih Efektif C++".