小编rak*_*hdn的帖子

从 std::forward 赋值优于从 std::move 赋值的情况有哪些?为什么?

std::exchangecppreference.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在上面的代码片段中使用?是否有一个简单的经验法则来决定何时这是更好的选择?

c++ move-semantics perfect-forwarding

2
推荐指数
1
解决办法
97
查看次数

标签 统计

c++ ×1

move-semantics ×1

perfect-forwarding ×1