Skip to content

Forwarding Reference ​

想寫一個 wrapper,把參數原封不動(l-value / r-value)轉給 foo:

cpp
template <typename T>
void callFoo(T&& val) {          // forwarding reference
    foo(std::forward<T>(val));   // 保留 value category
}
  • 只有在 template 型別推導 時,T&& 才是 forwarding reference;int&& 就只是 r-value reference
  • 推導:傳 l-value → T = U&,傳 r-value → T = U
  • 有名字的變數一律是 l-value,所以直接 foo(val) 永遠呼叫 l-value 版本,需要 std::forward<T>

參考 ​

頁面歷史

Just observe 👀