Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Peraturan Rubuh Rujukan C 11 Mendayakan Pemajuan Sempurna?

Bagaimanakah Peraturan Rubuh Rujukan C 11 Mendayakan Pemajuan Sempurna?

Linda Hamilton
Linda Hamiltonasal
2024-12-26 22:27:13457semak imbas

How Do C  11 Reference Collapsing Rules Enable Perfect Forwarding?

Peranan Rujukan Rubuh Peraturan dalam C 11

Rujukan Rujukan Rubuh Peraturan memainkan peranan penting dalam membolehkan penghantaran sempurna dalam C 11. Kemajuan sempurna membolehkan berfungsi untuk menerima dan menyampaikan parameter dengan lancar mengikut nilai, rujukan nilai atau nilai rujukan.

Peraturan Rujukan Rujukan

Peraturan runtuh rujukan untuk C 11 ialah:

  • A& & & -> A&
  • A& & & -> A&
  • A& & & -> A&
  • A& & & & & -> A& &

Rasional Rujukan Runtuh

Peraturan ini memastikan bahawa, tanpa mengira cara parameter diluluskan (oleh rujukan lnilai, rnilai atau rnilai), ia akan sentiasa "dilihat" oleh fungsi penerima sebagai jenis yang dikehendaki untuk sempurna pemajuan.

  • Kepada Rujukan Nilai: Apabila menghantar nilai l melalui rujukan nilai (cth., T&), peraturan runtuh menukarkan "& & &" kepada "&", memberikan rujukan nilai yang betul untuk mengikat kepada nilai bukan pemalar penerima rujukan.
  • To Const Lvalue Rujukan: Apabila menghantar const lvalue dengan const lvalue rujukan (cth. const T&), peraturan runtuh memastikan bahawa constness dipelihara dan parameter terikat kepada rujukan nilai konst yang betul dalam penerima.
  • Kepada Rujukan Rvalue: Melepasi rujukan rvalue (cth., T& &), tanpa mengira jenis nilai masuk, mengakibatkan keruntuhan kepada "& &", yang membolehkan pemajuan sempurna bagi xvalues ​​(objek sementara) dan prvalues ​​(fungsi mengembalikan nilai jenis T& &).

Penggunaan dalam Utiliti C 11 STL Fungsi

Fungsi utiliti STL seperti std::move() dan std::forward() menggunakan rujukan runtuh secara dalaman untuk memudahkan pemajuan yang sempurna. Contohnya:

template<class T>
void Fwd(T & &v) {
  Call(std::forward<T>(v));
}

std::forward<> meruntuhkan "& &" kepada "&" untuk rujukan lnilai dan "& &" kepada "& &" untuk rujukan rnilai, membolehkan Panggilan menerima parameternya dalam format yang sesuai.

Hubungan dengan std: :remove_reference

Utiliti seperti std::remove_reference boleh digunakan untuk mengalih keluar rujukan daripada potongan jenis (cth., std::remove_reference mengembalikan T). Walau bagaimanapun, ia tidak menggantikan keperluan untuk peraturan runtuh rujukan dalam C 11. std::remove_reference hanya mengalih keluar lapisan rujukan, manakala rujukan runtuh memastikan bahawa parameter yang dimajukan diterima dalam format yang betul untuk pemajuan yang sempurna.

Atas ialah kandungan terperinci Bagaimanakah Peraturan Rubuh Rujukan C 11 Mendayakan Pemajuan Sempurna?. 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