std::exchange在cppreference.com上学习时,我遇到了下面粘贴的“可能的实现”。
template<class T, class U = T>
T exchange(T& obj, U&& new_value)
{
T old_value = std::move(obj);
obj = std::forward<U>(new_value);
return old_value;
}
Run Code Online (Sandbox Code Playgroud)
obj = std::forward在赋值语句中看到而不是看起来有点奇怪std::move,我认为这会产生相同的效果。
我的理解是,这std::move等效于static_cast右值引用类型(但更具表现力)并始终返回 xvalue,而std::forward返回传递的相同值类型。
我的问题是为什么std:forward在上面的代码片段中使用?是否有一个简单的经验法则来决定何时这是更好的选择?