何时在`std :: move()`函数中调用移动构造函数?

时间:2013-02-07 11:04:10

标签: c++ c++11 move-semantics rvalue-reference

函数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()函数本身,但可能在返回的引用最终到达的位置。
  5. 我打赌4号,但我不是百分百肯定,所以请解释你的答案。

2 个答案:

答案 0 :(得分:8)

没有移动施工。 std::move()接受引用并返回引用。 std::move()基本上只是演员。

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

答案 1 :(得分:3)

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