Rumah > pembangunan bahagian belakang > C++ > Bilakah Parameter Rujukan Rvalue Boleh Mengikat kepada Argumen Nilai L dalam C?

Bilakah Parameter Rujukan Rvalue Boleh Mengikat kepada Argumen Nilai L dalam C?

Linda Hamilton
Lepaskan: 2024-12-07 21:48:18
asal
947 orang telah melayarinya

When Can an Rvalue Reference Parameter Bind to an Lvalue Argument in 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
Salin selepas log masuk

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
}
Salin selepas log masuk

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(t).

Peraturan Berkaitan:

  • Peralihan tersirat ke parameter rujukan rnilai berlaku apabila mengembalikan nilai yang dinamakan daripada fungsi , atau apabila nilai tidak mempunyai nama.
  • Hanya rujukan rnilai dan const& boleh mengikat kepada rnilai.
  • Rujukan Rnilai dan const& menjalani lanjutan seumur hidup apabila terikat terus kepada rujukan di luar pembina.
  • Rujukan runtuh mengubah T&& menjadi X& atau X const& jika T adalah jenis X& atau X const&.
  • Dalam konteks potongan jenis, T&& menyimpulkan T sebagai X, X&, X const& atau X const&& berdasarkan jenis hujah.

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan