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>