Rumah >pembangunan bahagian belakang >C++ >Mengapa `T&&` Tidak Sentiasa Berkelakuan Seperti Rujukan Nilai R Sebenar?

Mengapa `T&&` Tidak Sentiasa Berkelakuan Seperti Rujukan Nilai R Sebenar?

Linda Hamilton
Linda Hamiltonasal
2024-11-30 06:21:15398semak imbas

Why Doesn't `T&&` Always Behave Like a True Rvalue Reference?

Mengapa T&& Tidak Berkelakuan Seperti Rujukan Rvalue?

Apabila bekerja dengan lebihan fungsi seperti void f(T&&) dan void f(T& ), amat mengejutkan apabila mendapati f(T&) dipanggil apabila lulus dalam T&&, walaupun sebaliknya tidak benar. Ini disebabkan oleh tingkah laku rujukan nilai dalam C .

Bertentangan dengan gerak hati, T&& bukan sekadar rujukan nilai. Ia adalah rujukan rnilai jenis, yang bermaksud ia hanya boleh mengikat rnilai tetapi sebaliknya berkelakuan seperti lnilai rujukan rnilai jenis. Tingkah laku mengikat ini memastikan bahawa objek tanpa nama dan yang akan kehilangan nama mereka dianggap secara automatik sebagai nilai r.

Walau bagaimanapun, memandangkan T&& mempunyai nama (iaitu, t), ia dianggap sebagai lnilai dan dengan itu memanggil f( T&) terlebih beban. Casting statik t ke T&&& menggunakan f(static_cast(t)) adalah perlu untuk menggunakan lebihan rujukan rnilai f(T&&).

Untuk meringkaskan, peraturan C yang mengawal tingkah laku ini ialah:

  • Pergerakan tersirat berlaku apabila mengembalikan nilai yang dinamakan daripada fungsi, apabila nilai tidak mempunyai nama atau apabila fungsi secara eksplisit mengembalikan rujukan nilai.
  • Hanya rujukan nilai dan const& boleh mengikat kepada nilai.
  • Pelanjutan seumur hidup rujukan pada nilai sementara berlaku apabila terikat terus pada rujukan di luar pembina dan digunakan pada rujukan rnilai dan const&.
  • T&& ialah tidak selalunya rujukan nilai; ia mungkin runtuh kepada X&, X const& atau X const&& berdasarkan jenis T.
  • T&& boleh bertindak sebagai "rujukan pemajuan" dalam konteks potongan jenis, menyimpulkan T berdasarkan jenis hujah.

Atas ialah kandungan terperinci Mengapa `T&&` Tidak Sentiasa Berkelakuan Seperti Rujukan Nilai R Sebenar?. 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