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
Patricia Arquetteasal
2024-11-29 22:50:11410semak imbas

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)

Di dalam yang lain fungsi:

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

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));

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!

Kenyataan:
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