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
885 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!

sumber:php.cn
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