Rumah >pembangunan bahagian belakang >C++ >Bilakah Parameter Rujukan Rvalue Boleh Mengikat kepada Argumen Nilai L dalam C?
Mengapa Parameter Rujukan Rvalue Boleh Mengikat pada Argumen Lvalue
Dalam C , rujukan rvalue dijangka terikat pada rvalues. Walau bagaimanapun, terdapat kes di mana parameter rujukan rvalue boleh memadankan hujah lvalue, mengejutkan ramai pengaturcara.
Pertimbangkan kod berikut:
void f(T&&); // #1 void f(T&); // #2
Biasanya, kami menjangkakan f(T&&) lebihan untuk dipanggil apabila melepasi nilai r, dan f(T&) lebihan untuk lnilai. Walau bagaimanapun, tingkah laku adalah berbeza:
void g(T&& t) { f(t); // calls #2 }
Dalam contoh ini, lebihan f(T&) dipanggil walaupun t ialah nilai r. Ini berlaku kerana, walaupun jenis rujukan rnilainya, t masih dianggap sebagai nilai l.
Rasional:
Nilai-nilai lazimnya ialah entiti tanpa nama atau yang akan kehilangannya nama tidak lama lagi. Rujukan Rvalue hanya boleh mengikat rvalues. Walau bagaimanapun, t mempunyai nama, dan hayatnya tidak akan tamat serta-merta.
Jenis T&&:
T&& ialah jenis rujukan nilai. Walaupun ia hanya boleh mengikat kepada rnilai, ia sebaliknya bertindak sebagai lnilai jenis rujukan rnilai. Sifat rujukan nilainya hanya penting semasa pembinaannya dan semasa melaksanakan decltype(nama_pembolehubah).
Peranan std::move():
std::move( ) mengembalikan rujukan rnilai dengan melakukan a static_cast
Peraturan Berkaitan:
Atas ialah kandungan terperinci Bilakah Parameter Rujukan Rvalue Boleh Mengikat kepada Argumen Nilai L dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!