Apakah Perbezaan Antara Rujukan Universal dan Rujukan Pemajuan dalam C ?

Patricia Arquette
Lepaskan: 2024-11-10 12:53:02
asal
508 orang telah melayarinya

What is the Difference Between Universal References and Forwarding References in C  ?

Memahami Konsep Universal dan Rujukan Pemajuan

Dalam C , perbezaan antara rujukan universal dan pemajuan boleh mengelirukan. Walaupun kedua-dua istilah merujuk kepada konsep yang sama, takrifan tepatnya telah berkembang dari semasa ke semasa.

Dalam C 11, istilah "rujukan sejagat" telah diperkenalkan untuk menerangkan keupayaan parameter templat untuk menerima rujukan rnilai dan lnilai. . Ini dicapai dengan menggunakan rujukan rnilai kepada parameter templat cv-tidak layak.

Walau bagaimanapun, dengan pengenalan C 14, istilah yang lebih tepat telah diterima pakai: "rujukan pemajuan." Seperti yang ditakrifkan dalam standard C 14, rujukan pemajuan ialah "rujukan nilai kepada parameter templat cv-tidak layak."

Perbezaan Utama

Perbezaan utama antara universal dan rujukan pemajuan terletak pada semantiknya. Walaupun kedua-duanya menerima rujukan rvalue dan lvalue, piawaian menjelaskan bahawa untuk rujukan pemajuan, jenis yang disimpulkan untuk hujah yang diberikan ialah "rujukan nilai kepada A" jika hujah ialah nilai l.

Memajukan

Adalah penting untuk ambil perhatian bahawa istilah "rujukan pemajuan" tidak membayangkan penggunaan fungsi std::forward dalam badan fungsi. Aspek pemajuan merujuk semata-mata kepada proses potongan jenis. Sama ada rujukan itu dimajukan kemudiannya atau tidak adalah tidak relevan.

Contoh

Pertimbangkan templat fungsi berikut:

template<typename A>
void foo(A&& a) {
  // Forwarding does not occur here
}
Salin selepas log masuk

Dalam contoh ini, jenis parameter a ialah rujukan pemajuan. Jika nilai l diluluskan sebagai hujah kepada fungsi ini, jenis a akan disimpulkan sebagai "rujukan nilai kepada A." Walau bagaimanapun, badan fungsi tidak melakukan sebarang pemajuan.

Atas ialah kandungan terperinci Apakah Perbezaan Antara Rujukan Universal dan Rujukan Pemajuan 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