13

函数std::move()定义为

template<typename T>
typename std::remove_reference<T>::type&& move(T && t)
{ 
    return static_cast<typename std::remove_reference<T>::type&&>( t ); 
}

我可以想象在四个地方调用移动构造函数:

  1. 传递参数时。
  2. 进行演员表时。
  3. 返回结果时。
  4. 不在std::move()函数本身,但可能在返回的引用最终到达的地方。

我会赌第 4 号,但我不是 100% 确定,所以请解释你的答案。

4

2 回答 2

8

没有移动施工正在进行。std::move()接受一个引用并返回一个引用。std::move()基本上只是一个演员表。

您的猜测 4. 是正确的(假设您实际上最终调用了移动构造函数)。

于 2013-02-07T11:44:10.607 回答
3

std::move 只是一个类型转换,它告诉编译器该类型是一个右值。

于 2013-02-07T11:36:15.567 回答