c++ - C++ 中的 std::move 和按引用传递有什么区别?

标签 c++ c++11 move

<分区>

我觉得通过引用传递并且 move 具有相同的结果。在下面的示例中, move 语义和按引用传递具有相同的结果。我假设当我们使用 move 语义时,所有权传递给函数,并且主要是变量不包含任何值。

#include <iostream>

using namespace std;
void move_function(int&& a)
{
    cout<<"a:"<<a<<endl;
    a++;
    cout<<"a:"<<a<<endl;
}

void function(int& val)
{
    val++;
    cout<<"val:"<<val<<endl;;
}

int main()
{
    int a = 100;
    move_function(move(a));
    cout<<"main a:"<<a<<endl;
    function(a);
    cout<<"main a:"<<a<<endl;

    return 0;
}

谁能帮我解释一下我的困惑。我对 move 的理解哪里出了问题?

最佳答案

Move() 将所有权授予您的新对象。它在您希望将互斥锁的所有权传递给锁的多线程中很有用。

按引用传递是一种通过创建别名在函数之间传递对象的方法。

关于c++ - C++ 中的 std::move 和按引用传递有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56039847/

相关文章:

c++: "pointer to const"指向的对象是否被认为是不变的或只是不可修改的?

c++ - 无法创建窗口

c++ - 使 Sublime Text 在 Mac 上使用 gcc4.8

c++异构容器,获取条目作为类型

c++ - 使命令创建一个.file,但不创建应用程序文件

c++ - Visual Studio 2013 C++ - 将 std::unique_ptr 传递给绑定(bind)函数

c++ - 提高 += 运算符性能

C++:如果我不使用 move ,我还需要关心复制控制吗?

boost - 在 C++11 中的 boost::asio 套接字对象上重复 std::move

c++ - 了解 std::move 和 unique_ptr