Resolusi Terlebih Beban: Nilai, Rujukan Nilai R dan Rujukan Nilai Konst
Dalam resolusi lebihan beban, adalah perkara biasa untuk menghadapi panggilan samar-samar apabila berbilang fungsi berdaya maju berkongsi jenis parameter yang sama. Kes yang sangat menarik timbul apabila lebihan beban berlaku antara nilai, rujukan rnilai dan rujukan nilai const.
Kekaburan dan Penyelesaian
Memandangkan fungsi:
int f( int ); int f( int && ); int f( int const & );
panggilan int q = f( 3 ); menjadi samar-samar. Clang dan GCC lebih suka rujukan rvalue berbanding rujukan lvalue apabila f( int ) dialih keluar. Walau bagaimanapun, mengalih keluar sama ada lebihan beban rujukan membawa kepada kekaburan dengan f( int ).
Peraturan untuk Resolusi Lebihan
Leraian lebihan beban adalah berdasarkan mencari "padanan yang lebih baik" yang unik untuk parameter. Sekiranya tiada peraturan khas, ketiga-tiga permulaan (nilai, rujukan nilai dan rujukan nilai tetap) tidak dapat dibezakan.
Walau bagaimanapun, memandangkan rujukan nilai mengikat kepada nilai dan rujukan nilai tetap tidak, maka rujukan rnilai dianggap sebagai padanan yang lebih baik kerana peraturan berikut dalam 13.3.3.2:
S1 binds an rvalue reference to an rvalue and S2 binds an lvalue reference.
Peraturan ini tidak terpakai apabila satu permulaan bukan pengikatan rujukan.
Cadangan untuk Piawaian Masa Depan
The pengarang mencadangkan bahawa int && harus diutamakan daripada int dalam piawaian masa hadapan kerana ia memaksa pemulaan mengikat kepada pemula, tidak seperti jenis objek tanpa kekangan. Ini boleh berfungsi sebagai alternatif kepada nilai pas-demi tulen sambil mengelakkan overhed pergerakan.
Atas ialah kandungan terperinci Bagaimana Resolusi C Overload Mengendalikan Nilai, Rujukan Rvalue dan Parameter Rujukan Nilai Const?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!