Rumah >pembangunan bahagian belakang >C++ >## Bilakah Saya Perlu Menggunakan std::forward dalam Templat Fungsi C?
Memahami Kes Penggunaan std::forward dalam C
C 0x memperkenalkan fungsi std::forward, alat yang berharga untuk pemajuan hujah dalam templat fungsi. Apabila menggunakan std::forward, adalah penting untuk mempertimbangkan bila dan bagaimana ia harus digunakan.
Bila Menggunakan std::forward
std::forward adalah terutamanya digunakan apabila menghantar hujah ke templat fungsi lain:
<code class="cpp">template<class T> void foo(T&& arg) { bar(std::forward<T>(arg)); }</code>
Dalam contoh ini, std::forward membenarkan foo memajukan hujah arg ke bar dengan jenis dan kelayakan rujukan yang betul. Tanpa std::forward, hujah akan dihantar sebagai salinan, yang berpotensi membawa kepada operasi yang tidak perlu.
Pengisytiharan Parameter dengan &&
Dalam fungsi foo di atas, pengisytiharan parameter menggunakan &&. Ini bukan keperluan untuk menggunakan std::forward, tetapi ia boleh memberikan beberapa kelebihan. Dengan menggunakan &&, fungsi boleh menerima kedua-dua nilai r dan lnilai, walaupun ia diisytiharkan dengan rujukan nilai.
Memajukan dalam Senarai Argumen Berbilang
Dalam kes dengan berbilang senarai argumen, std::forward boleh digunakan untuk memajukan hujah secara individu:
<code class="cpp">template<int val, typename... Params> void doSomething(Params... args) { doSomethingElse<val, Params...>(args...); }</code>
Dalam kes ini, menggunakan && dalam pengisytiharan parameter adalah diutamakan, kerana ia membenarkan fungsi menerima sebarang jenis hujah. Argumen kemudiannya dimajukan ke doSomethingElse menggunakan std::forward:
<code class="cpp">doSomethingElse<val, Params...>(std::forward<Params>(args)...); }</code>
Multiple Forwarding
Memajukan hujah yang sama ke pelbagai fungsi menimbulkan kebimbangan tentang memindahkan dan membuat ingatan tidak sah. Oleh itu, pada umumnya tidak digalakkan untuk menggunakan std::forward beberapa kali untuk hujah yang sama.
Atas ialah kandungan terperinci ## Bilakah Saya Perlu Menggunakan std::forward dalam Templat Fungsi C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!