Memahami Rujukan dan Nilai Rnilai
Pertimbangkan kod berikut:
void foo(string&& bar){ string* temp = &bar; cout << *temp << " @:" << temp << endl; }
Di sini, persoalan timbul: Adakah bar pembolehubah an rvalue atau an lvalue?
Jawapan: Bar ialah Lvalue
Walaupun mempunyai jenis "rujukan rnilai kepada rentetan," bar masih merupakan nilai l kerana ia mempunyai nama. Nilai l, mengikut takrifan, ialah sebarang ungkapan yang menilai kepada lokasi storan yang dinamakan.
Membezakan Rujukan Rvalue daripada Rujukan Lvalue
Sementara anda boleh melakukan operasi yang serupa pada rvalue dan rujukan nilai dalam ungkapan, ia berbeza dengan ketara dalam perkara yang boleh mengikat mereka:
Kepentingan Rujukan Rnilai
The perbezaan antara rujukan rvalue dan lvalue menjadi penting apabila berurusan dengan parameter fungsi jenis rujukan rvalue. Rujukan Rvalue menyampaikan maklumat berharga: nilai yang mereka rujuk ialah nilai r, yang bermaksud ia bersifat sementara dan akan dimusnahkan setelah selesai ungkapan. Ini membenarkan rawatan selamat bagi nilai yang dirujuk sebagai nilai r.
Kesimpulan
Perbezaan antara rujukan rnilai dan lnilai bukan terletak pada kebolehgunaannya dalam ungkapan tetapi pada apa yang boleh terikat kepada mereka. Rujukan nilai memberikan maklumat penting tentang sifat nilai yang dirujuk, membenarkan pengurusan sumber yang cekap dan layanan yang sesuai sebagai nilai.
Atas ialah kandungan terperinci Adakah `bar` Lvalue atau Rvalue dalam `void foo(string&& bar)`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!