Rumah > pembangunan bahagian belakang > C++ > Mengapa Rujukan Rvalue Kadangkala Bertindak Seperti Nilai L dalam Fungsi C Terlebih Beban?

Mengapa Rujukan Rvalue Kadangkala Bertindak Seperti Nilai L dalam Fungsi C Terlebih Beban?

Patricia Arquette
Lepaskan: 2024-11-29 22:50:11
asal
380 orang telah melayarinya

Why Does an Rvalue Reference Sometimes Act Like an Lvalue in C   Function Overloading?

Memahami Pembolehubah Rujukan Rvalue

Dalam C , rujukan rvalue ialah jenis rujukan khusus yang hanya boleh mengikat kepada rvalues ​​(nilai tanpa nama ). Walau bagaimanapun, tingkah laku yang mengejutkan timbul apabila fungsi terlampau beban dengan rujukan lnilai dan lebihan rujukan nilai.

Kekeliruan: Pembolehubah Rujukan Rnilai Berkelakuan Seperti Lnilai

Pertimbangkan kelebihan fungsi berikut:

void f(T&&); // Overload #1 (rvalue reference)
void f(T&);  // Overload #2 (lvalue reference)
Salin selepas log masuk

Di dalam yang lain fungsi:

void g(T&& t) 
{ 
  f(t);  // Calls Overload #2 (lvalue reference)
}
Salin selepas log masuk

Hasil yang mengejutkan ialah Overload #2 (rujukan lnilai) dipanggil, walaupun hujah t ialah rujukan rnilai.

Sebab: Rujukan Rnilai Adalah Lnilai dengan Jenis Khas

Rujukan Rnilai dianggap sebagai lnilai kerana ia mempunyai nama dan boleh digunakan sebagai nilai untuk kebanyakan tujuan. Walau bagaimanapun, jenisnya, rujukan rnilai, menentukan keupayaan pengikatan terhad mereka.

Cara Mendapatkan Lebihan Rujukan Rvalue

Untuk menggunakan lebihan rujukan rnilai, hujah mestilah ditukar secara eksplisit kepada rujukan rvalue menggunakan static_cast pengendali:

f(static_cast<T&amp;&amp;>(t));
Salin selepas log masuk

Peraturan Lain yang Mentadbir Rujukan Rnilai

  • T&& boleh bertindak sebagai rujukan pemajuan dalam konteks templat.
  • T&& boleh mengikat kepada rnilai atau rujukan kepada rnilai (X const&&).
  • Rujukan nilai mempunyai kedua-dua sifat mengikat statik dan dinamik.
  • Pelanjutan sepanjang hayat rujukan berlaku apabila rujukan rnilai terikat secara langsung kepada nilai sementara, memanjangkan hayatnya sehingga hayat rujukan tamat tempoh.

Atas ialah kandungan terperinci Mengapa Rujukan Rvalue Kadangkala Bertindak Seperti Nilai L dalam Fungsi C Terlebih Beban?. 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