Rumah >pembangunan bahagian belakang >C++ >Mengapa Meluluskan Const Membantah kepada Fungsi Bukan Ahli Konst Menyebabkan Ralat Hilang Kelayakan Kelayakan dalam C ?

Mengapa Meluluskan Const Membantah kepada Fungsi Bukan Ahli Konst Menyebabkan Ralat Hilang Kelayakan Kelayakan dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-12-08 04:27:09829semak imbas

Why Does Passing a Const Object to a Non-Const Member Function Cause a Qualifier Disqualification Error in C  ?

Meluluskan Objek Const sebagai 'ini' Argumen: Ralat Penyingkiran Kelayakan

Dalam C , menghantar objek const sebagai argumen 'ini' kepada fungsi ahli boleh mengakibatkan "melepasi 'const xxx' kerana hujah 'ini' fungsi ahli membuang kelayakan" kesilapan. Ini berlaku kerana pengkompil menganggap kemungkinan bahawa fungsi bukan ahli const boleh mengubah suai objek, yang dilarang untuk objek const.

Analisis Masalah

Dalam kod yang disediakan , objek dalam set disimpan sebagai const StudentT. Apabila mengakses fungsi ahli getId() dan getName() dalam gelung, pengkompil mengesan isu ini kerana objek adalah const dan fungsi ahli tidak ditandakan sebagai const.

Penyelesaian

Untuk menyelesaikan ralat, fungsi getId() dan getName() mesti dibuat const:

int getId() const {
    return id;
}

string getName() const {
    return name;
}

Ini membolehkan fungsi dipanggil pada objek const tanpa melanggar peraturan const.

Nota Tambahan

  • Begitu juga, pengendali< fungsi harus dilaksanakan sebagai rujukan const:
inline bool operator< (const StudentT &amp; s1, const StudentT &amp; s2) {
    return s1.getId() < s2.getId();
}
  • Menyampaikan rujukan (bukan objek) kepada fungsi ahli adalah lebih baik untuk prestasi dan ketepatan kod.

Atas ialah kandungan terperinci Mengapa Meluluskan Const Membantah kepada Fungsi Bukan Ahli Konst Menyebabkan Ralat Hilang Kelayakan Kelayakan 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