c++ - move 语义 std::move

标签 c++ c++11 move-semantics

std::move函数我不是很懂

template <class T>
typename remove_reference<T>::type&&
move(T&& a)
{
    return a;
}

为什么是 remove_reference ? 谁能给我一个简单的解释?

最佳答案

想想如果 T 会发生什么是一个左值引用,例如 MyClass & .在这种情况下,T &&将变为 MyClass & && ,并且由于引用折叠规则,这将被转换为 MyClass &再次。为了获得正确的结果,typename remove_reference<MyClass&>::type&&首先从类型中删除所有引用装饰,所以 MyClass &映射到 MyClass ,然后将右值引用应用于它,产生 MyClass && .

关于c++ - move 语义 std::move,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5529382/

相关文章:

c++ - Qt 名称冲突,但 no_keywords 不是一个选项

c++ - 如何在 O(n) 运行时间内从答案中删除重复项?

c++ - va_list 还在 C++ 中使用吗?还是鼓励使用 template<typename...T>?

c++ - C++11 的移动语义是否减少了手动内存管理的需要?

c++ - 为什么 C++11 的 move 构造函数/赋值运算符不按预期运行

c++ - 创建原子引用计数的尝试因死锁而失败。这是正确的方法吗?

c++ - initializeDb 中的 QPainter#drawText 段错误

c++11 - 使用 std::bind 与 lambda 进行绑定(bind)。它们有多贵?

c++ - 为什么没有默认的 move 分配/move 构造函数?

c++ - lambda 的初始化顺序作为接受其他参数的参数