Rumah > pembangunan bahagian belakang > C++ > Mengapakah `bigCat.*pcat()` Gagal Disusun Apabila Mendapat Penunjuk Fungsi Ahli?

Mengapakah `bigCat.*pcat()` Gagal Disusun Apabila Mendapat Penunjuk Fungsi Ahli?

Linda Hamilton
Lepaskan: 2024-12-23 08:17:16
asal
897 orang telah melayarinya

Why Does `bigCat.*pcat()` Fail to Compile When Invoking a Member Function Pointer?

Menyingkap Invokasi Penunjuk Fungsi Ahli Enigmatic

Dalam dunia pengaturcaraan berorientasikan objek, penunjuk fungsi ahli memainkan peranan penting dalam memanipulasi kelas ahli. Walau bagaimanapun, menggunakan fungsi ahli melalui penunjuk boleh menjadi tugas yang membingungkan. Pertimbangkan coretan kod berikut:

class cat {
public:
   void walk() {
      printf("cat is walking \n");
   }
};

int main(){
   cat bigCat;
   void (cat::*pcat)();
   pcat = &cat::walk;
   bigCat.*pcat();
}
Salin selepas log masuk

Percubaan untuk menyusun kod ini mengakibatkan ralat. Persoalan yang menarik masih ada: mengapa kenyataan bigCat.*pcat() yang kelihatan tidak berbahaya gagal untuk disusun?

Mentafsir Masalah

Jawapannya terletak pada keutamaan pengendali . Dalam coretan kod ini, ungkapan () mempunyai keutamaan yang lebih tinggi daripada operator mengikat penunjuk-ke-ahli .*. Akibatnya, pengkompil mentafsirkan ungkapan sebagai (bigCat.*)pcat(), yang bukan tingkah laku yang dimaksudkan.

Menyelesaikan Teka-teki

Untuk menyelesaikan isu ini, kita perlu menyatakan dengan jelas keutamaan operasi. Dengan menambahkan tanda kurung di sekeliling ungkapan bigCat.*pcat(), kami memastikan bahawa pengikatan penunjuk kepada ahli berlaku dahulu.

(bigCat.*pcat)();
Salin selepas log masuk

Kesimpulan

Dengan penempatan kurungan yang betul, kod itu kini menyusun dan melaksanakan tanpa ralat. Ini berfungsi sebagai peringatan bahawa memahami keutamaan pengendali adalah penting dalam memastikan tafsiran yang betul bagi kod anda.

Atas ialah kandungan terperinci Mengapakah `bigCat.*pcat()` Gagal Disusun Apabila Mendapat Penunjuk Fungsi Ahli?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan