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 }
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!