std::forward和std::move都是C++11引入的新特性,用于處理右值引用和完美轉發。
std::forward的作用是將傳入的參數轉發給另一個函數,并保持其原有的左值或右值屬性。通常用于在轉發函數中保持原參數的引用類型。例如:
template <typename T>
void func(T&& val)
{
other_func(std::forward<T>(val));
}
std::move的作用是將一個左值轉換為右值引用,從而可以將其傳遞給需要右值引用的函數,例如移動構造函數。通常用于在移動語義中標記對象可以被移動。例如:
std::string str1 = "hello";
std::string str2 = std::move(str1); // str1被標記為可移動的
總結來說,std::forward用于完美轉發參數,保持原參數的引用類型;而std::move用于將一個左值轉為右值引用,用于移動語義中標記對象可以被移動。兩者的主要區別在于其作用的對象和場景不同。