3
เมื่อใดที่จะใช้ std :: forward เพื่อส่งต่อข้อโต้แย้ง?
C ++ 0x แสดงตัวอย่างการใช้std::forward: template<class T> void foo(T&& arg) { bar(std::forward<T>(arg)); } เมื่อใดจึงจะใช้ประโยชน์std::forwardเสมอ นอกจากนี้ยังจำเป็นต้องใช้&&ในการประกาศพารามิเตอร์มันถูกต้องในทุกกรณี? ฉันคิดว่าคุณจะต้องส่งผ่านฟังก์ชั่นชั่วคราวหากฟังก์ชั่นนั้นถูกประกาศไว้&&ในนั้นดังนั้นฟูสามารถถูกเรียกด้วยพารามิเตอร์ใด ๆ ได้หรือไม่? สุดท้ายถ้าฉันมีฟังก์ชั่นการโทรเช่นนี้ template<int val, typename... Params> void doSomething(Params... args) { doSomethingElse<val, Params...>(args...); } ฉันควรใช้สิ่งนี้แทน: template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); } นอกจากนี้หากใช้พารามิเตอร์สองครั้งในฟังก์ชั่นเช่นการส่งต่อไปยังสองฟังก์ชั่นในเวลาเดียวกันควรใช้std::forwardหรือไม่? จะไม่std::forwardแปลงสิ่งเดียวกันเป็นสองครั้งชั่วคราวย้ายหน่วยความจำและทำให้ไม่ถูกต้องสำหรับการใช้งานครั้งที่สอง? รหัสต่อไปนี้จะโอเคไหม template<int val, typename... Params> void doSomething(Params&&... …
155
c++
templates
forwarding
c++11