Sifat Penunjuk 'ini': Bukan const atau Constant?
Seperti yang dicadangkan oleh tajuk, penunjuk 'ini' ialah elemen di mana-mana dalam bahasa pengaturcaraan berorientasikan objek seperti C . Tetapi apakah jenis khususnya?
Jawapannya adalah dua kali ganda, bergantung pada konteks penggunaan: di dalam kaedah kelas bukan const, penunjuk 'ini' hanyalah penunjuk kepada jenis objek, iaitu, ' Nama Kelas '. Walau bagaimanapun, apabila digunakan dalam kaedah const, penunjuk 'ini' menjadi penunjuk tetap: 'Const ClassName '.
Rasional untuk Ketekalan
The tujuan perbezaan jenis ini adalah untuk menguatkuasakan keteguhan keadaan objek. Dalam kaedah const, data dalaman objek dianggap tidak berubah, menghalang sebarang pengubahsuaian. Dengan menjadikan penuding 'ini' sebagai penuding malar, pengkompil memastikan objek yang tidak boleh diubah suai sentiasa diakses melalui laluan akses const.
Penyusun Quirks
Sementara penunjuk 'ini' secara teorinya harus mempunyai jenis 'const ClassName *' dalam kaedah const, sesetengah penyusun mempamerkan kelainan dalaman. Mereka mentafsirkan penunjuk 'ini' sebagai penunjuk tetap, walaupun dalam kaedah tidak tetap. Amalan ini, yang pernah berleluasa dalam penyusun lama seperti GCC dan MSVC, bertujuan untuk menjamin ketidakbolehubahsuaian penunjuk 'ini'.
Kehancuran Helah Penunjuk Malar
Dengan pengenalan rujukan nilai dalam C 11, amalan mentafsir 'ini' sebagai penunjuk tetap menjadi tidak praktikal. Rujukan Rvalue boleh mengesan const tambahan pada jenis penunjuk 'ini', yang membawa kepada ralat kompilasi dalam persekitaran yang masih menggunakan teknik penunjuk tetap. Penyusun moden seperti GCC telah meninggalkan penyelesaian ini, manakala MSVC berterusan dalam pelaksanaannya sehingga hari ini.
Atas ialah kandungan terperinci Adakah Konst Penunjuk 'ini' atau Bukan Konst: Kisah Dua Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!