Dalam julat untuk gelung, persoalan bila hendak menggunakan rujukan pemajuan (cth., auto&&) lebih rujukan eksplisit (auto& atau const auto&) timbul. Walaupun const auto& biasanya sesuai untuk operasi baca sahaja, auto&& mungkin menawarkan faedah tertentu dalam sarung sudut yang tidak jelas.
Satu potensi kelebihan rujukan pemajuan terletak pada senario di mana urutan iterator mengembalikan rujukan proksi dan operasi bukan const diperlukan pada rujukan itu. Contohnya ialah pengubahsuaian elemen dalam vektor nilai boolean, seperti yang digambarkan di bawah:
#include <vector> int main() { std::vector<bool> v(10); for (auto& e : v) // Compiler error: cannot bind rvalue reference to non-const lvalue e = true; }
Kod ini tidak akan disusun kerana lelaran vektor boolean mengembalikan rujukan nilai, yang tidak boleh terikat kepada rujukan bukan nilai tetap (auto&). Menggunakan rujukan pemajuan (auto&&) menyelesaikan isu ini:
#include <vector> int main() { std::vector<bool> v(10); for (auto&& e : v) e = true; // Valid: forwarding reference can bind to rvalue reference }
Walaupun rujukan pemajuan boleh menangani kes sudut sedemikian, adalah penting untuk menggunakannya dengan bijak. Penggunaan auto&& secara percuma boleh menimbulkan soalan dan menjamin komen yang jelas untuk menerangkan keperluannya, seperti:
#include <vector> int main() { std::vector<bool> v(10); // using auto&& so that I can handle the rvalue reference // returned for the vector<bool> case for (auto&& e : v) e = true; }
Dalam kes di mana gelung secara konsisten mengendalikan rujukan proksi, auto juga boleh digunakan dan bukannya auto&& tanpa implikasi prestasi. Walau bagaimanapun, auto&& menjadi penyelesaian yang lebih sesuai apabila gelung bertukar antara pengendalian rujukan proksi dan rujukan lain.
Atas ialah kandungan terperinci Bilakah Saya Harus Menggunakan Rujukan Pemajuan (auto&&) dalam Range-Based For Loops?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!