Memahami Fungsi dengan Const Argumen dan Overloading
Dalam pengaturcaraan, terlebih muatan membenarkan berbilang fungsi dengan nama yang sama tetapi parameter berbeza wujud bersama dalam satu sama lain kelas. Walau bagaimanapun, apabila cuba untuk membebankan berdasarkan keteguhan jenis bukan penunjuk, bukan rujukan, ralat pengkompil timbul. Artikel ini meneroka sebab di sebalik sekatan ini dan pendekatan alternatif.
Pertimbangkan serpihan kod berikut:
class Test { public: Test() {} int foo(const int) const; int foo(int); };
Apabila menyusun kod ini, pengkompil akan mengeluarkan ralat yang menunjukkan bahawa fungsi foo tidak boleh terbeban. Ini kerana keteguhan jenis bukan penunjuk, bukan rujukan tidak menjejaskan tandatangan fungsi. Dalam contoh di atas, kedua-dua fungsi mempunyai tandatangan yang sama: int foo(int).
Untuk memahami sebab sekatan ini wujud, pertimbangkan situasi berikut:
Test obj; int variable = 0; obj.foo(3); // Calls the const function obj.foo(variable); // Intends to call the non-const function
Jika beban berlebihan dibenarkan berdasarkan pada constness, pengkompil tidak akan dapat menentukan fungsi yang hendak dipanggil apabila obj.foo(pembolehubah) digunakan. Ini kerana, apabila melalui nilai, nilai disalin dan penetapan const tidak berkaitan dengan panggilan fungsi.
Oleh itu, beban berlebihan berdasarkan keteguhan jenis bukan penuding dan bukan rujukan adalah tidak dibenarkan dalam C . Sebagai alternatif, seseorang boleh mencipta dua fungsi berasingan dengan nama yang berbeza, contohnya:
class Test { public: Test() {} int fooConst(const int); int fooNonConst(int); };
Atas ialah kandungan terperinci Mengapa Kita Tidak Boleh Membebankan Fungsi Berdasarkan Kelayakan `const` untuk Jenis Bukan Penunjuk, Bukan Rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!