Bolehkah Rujukan Rvalue Berperilaku Seperti Lvalue Dalam Fungsi?
Dalam pengaturcaraan, rujukan rnilai, dilambangkan dengan &&, biasanya digunakan merujuk kepada objek yang akan digerakkan. Walau bagaimanapun, persoalan timbul: jika rujukan rnilai diluluskan dengan merujuk kepada fungsi, adakah ia terus bertindak sebagai rnilai? Mari kita terokai senario ini dengan contoh khusus.
Coretan kod dalam soalan:
void foo(string&& bar) { string* temp = &bar; cout << *temp << " @:" << temp << endl; }
mentakrifkan fungsi foo() yang mengambil rujukan rnilai kepada rentetan. Dalam fungsi, kod memberikan alamat bar kepada temp pembolehubah penunjuk. Persoalannya, pada ketika ini, adakah bar masih rnilai atau telah ditukar menjadi lnilai?
Menurut definisi yang diberikan dalam jawapan, apa-apa sahaja yang mempunyai nama dianggap sebagai lnilai. Memandangkan bar mempunyai nama dalam fungsi, ia ialah nilai l, tanpa mengira fakta bahawa jenisnya ialah rujukan rnilai kepada rentetan.
Walau bagaimanapun, perbezaan antara nilai r dan nilai adalah penting dari segi apa yang boleh terikat dengan mereka. Rvalues hanya boleh terikat pada rujukan rvalue, manakala lvalues boleh mengikat kedua-dua rujukan lvalue dan rvalue.
Dalam kes foo(), memandangkan bar diisytiharkan secara khusus sebagai rujukan rvalue, pengkompil menjamin bahawa nilai terikat padanya adalah nilai. Pengetahuan ini membolehkan fungsi untuk merawat bar dengan selamat sebagai nilai r dan melaksanakan operasi seperti mengalihkan sumbernya.
Kesimpulannya, manakala rujukan rnilai dalam fungsi mungkin berkelakuan seperti lnilai dari segi penggunaannya dalam ungkapan, ia mengekalkan sifat asalnya sebagai rnilai. Perbezaan antara keduanya terutamanya terletak pada peraturan yang mengawal perkara yang boleh terikat pada rujukan ini.
Atas ialah kandungan terperinci Bolehkah Rujukan Rvalue yang dihantar ke Fungsi Masih Berkelakuan sebagai Rvalue?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!