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
Lepaskan: 2024-12-08 04:27:09
asal
843 orang telah melayarinya

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

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

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