Rumah > pembangunan bahagian belakang > C++ > Bilakah Kekaburan Penyelesaian Lebihan C Timbul Antara Nilai, Rujukan Nilai R dan Parameter Rujukan Nilai Konst?

Bilakah Kekaburan Penyelesaian Lebihan C Timbul Antara Nilai, Rujukan Nilai R dan Parameter Rujukan Nilai Konst?

Linda Hamilton
Lepaskan: 2024-11-28 11:16:13
asal
749 orang telah melayarinya

When Do C   Overload Resolution Ambiguities Arise Between Value, Rvalue Reference, and Const Lvalue Reference Parameters?

Kekaburan Resolusi Lebihan: Nilai, Rujukan Nilai R dan Rujukan Nilai Konst

Diberikan tiga fungsi terlampau beban dengan jenis parameter yang berbeza-beza (nilai, rujukan nilai, rujukan nilai const), panggilan fungsi boleh menjadi samar-samar jika ketiga-tiga beban lampau berdaya maju. Artikel ini membincangkan peraturan yang mengawal resolusi beban lampau dalam senario sedemikian dan meneroka gelagat bernuansa yang diperhatikan dalam C .

Peraturan

Dengan hanya satu parameter untuk dipertimbangkan, peraturan menyatakan bahawa satu permulaan parameter mesti padanan yang lebih baik daripada kedua-duanya dua yang lain. Apabila membandingkan dua pemulaan, sama ada satu dianggap lebih baik, atau kedua-duanya tidak dianggap lebih baik (tidak dapat dibezakan).

Jika tiada peraturan khas untuk pengikatan rujukan langsung, ketiga-tiga pemulaan itu tidak dapat dibezakan dalam ketiga-tiga perbandingan. Walau bagaimanapun, peraturan khas ini meningkatkan int&& (rujukan nilai) di atas const int& (rujukan nilai), manakala kedua-duanya tidak dianggap lebih baik atau lebih teruk daripada int (nilai). Oleh itu, tidak timbul padanan terbaik.

Matriks Perbandingan

Tingkah laku ini digambarkan dalam matriks berikut:

S1    S2
int   int&&         indistinguishable
int   const int&    indistinguishable
int&& const int&    S1 better
Salin selepas log masuk

Matriks menunjukkan bahawa int&& diutamakan berbanding const int& berdasarkan klausa 13.3.3.2 piawaian C. Peraturan ini terpakai pada pengikatan rujukan yang tidak merujuk kepada parameter objek tersirat bagi fungsi ahli bukan statik tanpa pelayakkan semula, dan di mana S1 mengikat rujukan rnilai kepada rnilai manakala S2 mengikat rujukan lnilai.

Walau bagaimanapun, peraturan ini tidak terpakai apabila salah satu permulaan bukan pengikatan rujukan, oleh itu kekaburan.

Arah Masa Depan

Pengarang mencadangkan mempertimbangkan int&& (rujukan nilai) sebagai padanan yang lebih baik daripada int (nilai), kerana rujukan mesti terikat pada pemula sementara jenis objek tidak tertakluk kepada kekangan sedemikian. Ini berpotensi membuat peraturan peleraian beban lampau baharu yang mengutamakan pengikatan daripada pemula. Walau bagaimanapun, cadangan ini memerlukan perbincangan lanjut dan potensi penyeragaman melalui platform cadangan masa hadapan isocpp.

Atas ialah kandungan terperinci Bilakah Kekaburan Penyelesaian Lebihan C Timbul Antara Nilai, Rujukan Nilai R dan Parameter Rujukan Nilai Konst?. 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