C ++ 0x menunjukkan contoh menggunakan std::forward
:
template<class T>
void foo(T&& arg)
{
bar(std::forward<T>(arg));
}
Kapan menguntungkan untuk digunakan std::forward
, selalu?
Selain itu, harus digunakan &&
dalam deklarasi parameter, apakah valid dalam semua kasus? Saya pikir Anda harus memberikan temporari ke suatu fungsi jika fungsi tersebut dideklarasikan &&
dengannya, jadi bisakah foo dipanggil dengan parameter apa saja?
Terakhir, jika saya memiliki panggilan fungsi seperti ini:
template<int val, typename... Params>
void doSomething(Params... args) {
doSomethingElse<val, Params...>(args...);
}
Haruskah saya menggunakan ini sebagai gantinya:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
}
Juga, jika menggunakan parameter dua kali dalam fungsi, yaitu meneruskan ke dua fungsi pada saat yang sama, apakah bijaksana untuk menggunakannya std::forward
? Tidak akan std::forward
mengubah hal yang sama menjadi sementara dua kali, memindahkan memori dan membuatnya tidak valid untuk penggunaan kedua? Apakah kode berikut tidak masalah:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
doSomethingWeird<val, Params...>(std::forward<Params>(args)...);
}
Saya agak bingung dengan std::forward
, dan saya dengan senang hati menggunakan beberapa kliring.
Args...&& args
?