c++ - 什么时候在 `std::move()` 函数中调用 move 构造函数?

标签 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 ); 
}

我可以想象要调用 move 构造函数的四个地方:

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

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

最佳答案

没有进行 move 构建。 std::move() 接受一个引用并返回一个引用。 std::move() 基本上只是一个类型转换。

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

关于c++ - 什么时候在 `std::move()` 函数中调用 move 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14749587/

相关文章:

c++ - shared_ptr如何在没有初始化的情况下在c++中工作

c++ - 从左值构造函数调用右值构造函数

c++ - 什么是 "rvalue reference for *this"?

c++ - 优化 CUDA 二维数组访问

c++ - 如何可移植地调用在某些平台上采用 char** 而在其他平台上采用 const char** 的 C++ 函数?

c++ - 在 C++ 类中使用位域的未对齐属性

c++ - 迭代有序容器与无序容器

c++ - 在破坏的对象上 move 构造函数?

c++11 - 为什么这个副本不能自动替换为招式?

C++ 异常处理和内存的动态分配