Rumah >pembangunan bahagian belakang >C++ >Bolehkah Rujukan Rvalue Bertindak sebagai Lvalues Di Dalam Fungsi C?
Dalam konteks C , timbul persoalan mengenai pengendalian rujukan rvalue dalam fungsi. Khususnya, sama ada argumen rujukan rvalue berkelakuan sebagai lvalue apabila digunakan dalam fungsi.
Pertimbangkan kod berikut:
void foo(string&& bar) { string* temp = &bar; cout << *temp << " @:" << temp << endl; }
Dalam contoh ini, bar argumen diisytiharkan sebagai rujukan rvalue kepada rentetan. Walau bagaimanapun, kod tersebut memberikan alamat bar kepada penunjuk (temp). Ini biasanya tidak dapat dilakukan dengan rnilai, yang tidak boleh diambil alamatnya.
Bertentangan dengan jangkaan, bar dalam kes ini dianggap sebagai lnilai. Ini kerana bar parameter fungsi secara tersirat ditukar kepada rujukan lnilai apabila terikat kepada nilai r. Jenis bar kekal sebagai "rujukan nilai kepada rentetan", tetapi kelakuannya sebagai nilai l membolehkan operasi seperti pengambilan alamat.
Walaupun nilai boleh ditukar ganti dan rujukan nilai dalam operasi tertentu dalam fungsi, perbezaan antara kedua-duanya mempunyai tujuan yang penting. Ia terletak pada fasa pengikatan:
Ini perbezaan menjadi penting apabila mengendalikan sementara atau apabila memastikan tingkah laku tertentu berfungsi argumen.
Sebagai contoh, pertimbangkan parameter fungsi jenis rujukan nilai:
void process(int&& value) { // Operations on value assuming it's an rvalue }
Dalam kes ini, fungsi mengetahui bahawa nilai yang dihantar ialah rnilai dan boleh melaksanakan operasi dengan sewajarnya, seperti mencuri sumber. Walau bagaimanapun, jika fungsi itu menghantar rujukan nilai kepada fungsi lain, ia perlu menentukan sama ada ia selamat untuk berbuat demikian. Jika fungsi asal dilakukan dengan nilai, ia boleh menggunakan std::move untuk memindahkan pemilikan, tetapi jika tidak, ia harus mengekalkan tingkah laku rujukan nilai untuk mengelakkan kemusnahan pramatang.
Pada dasarnya, perbezaan antara nilai l dan rujukan nilai bukan terletak pada operasi yang dilakukan ke atasnya, tetapi pada entiti yang boleh mengikatnya. Perbezaan ini memastikan pengurusan dan pengendalian yang betul bagi ungkapan nilai dalam fungsi dan menghalang tingkah laku yang tidak dijangka akibat pemusnahan nilai.
Atas ialah kandungan terperinci Bolehkah Rujukan Rvalue Bertindak sebagai Lvalues Di Dalam Fungsi C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!