Memahami Pembolehubah Rujukan Rvalue
Dalam C , rujukan rvalue ialah jenis rujukan khusus yang hanya boleh mengikat kepada rvalues (nilai tanpa nama ). Walau bagaimanapun, tingkah laku yang mengejutkan timbul apabila fungsi terlampau beban dengan rujukan lnilai dan lebihan rujukan nilai.
Kekeliruan: Pembolehubah Rujukan Rnilai Berkelakuan Seperti Lnilai
Pertimbangkan kelebihan fungsi berikut:
void f(T&&); // Overload #1 (rvalue reference) void f(T&); // Overload #2 (lvalue reference)
Di dalam yang lain fungsi:
void g(T&& t) { f(t); // Calls Overload #2 (lvalue reference) }
Hasil yang mengejutkan ialah Overload #2 (rujukan lnilai) dipanggil, walaupun hujah t ialah rujukan rnilai.
Sebab: Rujukan Rnilai Adalah Lnilai dengan Jenis Khas
Rujukan Rnilai dianggap sebagai lnilai kerana ia mempunyai nama dan boleh digunakan sebagai nilai untuk kebanyakan tujuan. Walau bagaimanapun, jenisnya, rujukan rnilai, menentukan keupayaan pengikatan terhad mereka.
Cara Mendapatkan Lebihan Rujukan Rvalue
Untuk menggunakan lebihan rujukan rnilai, hujah mestilah ditukar secara eksplisit kepada rujukan rvalue menggunakan static_cast pengendali:
f(static_cast<T&&>(t));
Peraturan Lain yang Mentadbir Rujukan Rnilai
Atas ialah kandungan terperinci Mengapa Rujukan Rvalue Kadangkala Bertindak Seperti Nilai L dalam Fungsi C Terlebih Beban?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!