何时是在“std::move()”函数中调用的move构造函数

When is the move constructor called in the `std::move()` function?

本文关键字:move 函数 调用 构造函数 std 何时      更新时间:2023-10-16

函数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号,但我不能百分之百确定,所以请解释一下你的答案。

没有正在进行的移动构造。std::move()接受引用并返回引用。std::move()基本上只是一个演员阵容。

你的猜测4。是正确的(假设您最终实际调用的是move构造函数)。

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