Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Saya Tidak Boleh Membebankan Fungsi Berdasarkan Ketetapan Argumen Bukan Penunjuk/Bukan Rujukan dalam C ?

Mengapa Saya Tidak Boleh Membebankan Fungsi Berdasarkan Ketetapan Argumen Bukan Penunjuk/Bukan Rujukan dalam C ?

Linda Hamilton
Linda Hamiltonasal
2024-11-20 11:40:41300semak imbas

Why Can't I Overload Functions Based on the Constness of Non-Pointer/Non-Reference Arguments in C  ?

Melebihi Fungsi dengan Argumen Konst

Dalam C , lebihan fungsi membenarkan berbilang fungsi dengan nama yang sama digunakan bergantung pada hujah yang dihantar kepada mereka. Walau bagaimanapun, dalam situasi tertentu, melebihkan fungsi berdasarkan semata-mata pada keteguhan jenis bukan penuding, bukan rujukan adalah tidak boleh dilaksanakan.

Pertimbangkan coretan kod berikut:

class Test {
public:
    int foo(int);
    int foo(const int) const;
};

Dalam contoh ini, niat kami adalah untuk membebankan fungsi foo, di mana satu fungsi adalah fungsi const dan yang lain tidak. Namun, kod ini mengakibatkan ralat kompilasi yang menyatakan bahawa fungsi tidak boleh terlebih beban.

Mengapa ini berlaku?

Pengkompil tidak boleh menyahkaburkan fungsi yang hendak dipanggil walaupun terdapat kata kunci const dihidupkan hujahnya. Apabila diluluskan oleh nilai, nilai akan disalin tanpa mengira keteguhan hujah. Oleh itu, const pada hujah hanya relevan dalam definisi fungsi itu sendiri.

Akibatnya, pengkompil tidak dapat menentukan versi fungsi foo yang hendak dipanggil berdasarkan semata-mata pada keteguhan hujah.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Membebankan Fungsi Berdasarkan Ketetapan Argumen Bukan Penunjuk/Bukan Rujukan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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