Rumah > pembangunan bahagian belakang > C++ > Mengapa Kita Tidak Boleh Membebankan Fungsi Berdasarkan Kelayakan `const` untuk Jenis Bukan Penunjuk, Bukan Rujukan?

Mengapa Kita Tidak Boleh Membebankan Fungsi Berdasarkan Kelayakan `const` untuk Jenis Bukan Penunjuk, Bukan Rujukan?

Patricia Arquette
Lepaskan: 2024-11-19 18:18:02
asal
737 orang telah melayarinya

Why Can't We Overload Functions Based on the `const` Qualifier for Non-Pointer, Non-Reference Types?

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);
};
Salin selepas log masuk

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
Salin selepas log masuk

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);
};
Salin selepas log masuk

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!

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