`T&` 綁定左值,`const T&` 綁定左/右值。無法針對右值(臨時對象)編寫專用邏輯(如移動構造),導致不必要的深拷貝。
template
typename remove_reference::type&& move(T&& a) {
return static_cast::type&&>(a);
}
**無條件將參數轉為右值引用**。使左值也能被當作右值處理(如 `std::swap` 內部使用 `move` 實現三次指釖交換而非深拷貝)。
模板函數轉發參數時,需保持參數的值屬性(左值/右值、const/volatile)。
template
T&& forward(typename remove_reference::type& arg) {
return static_cast(arg);
}
配合上述規則,`forward
`move`/`forward` 本質是 `static_cast`,賦予語義明確性。核心在於引用折疊規則與模板推導特例的配合。