C++ move()函数应用场景

C++ move()函数应用场景,第1张

C++ move()函数应用场景

场景1:

move(obj)函数的功能是把obj当做右值处理,可以应用在对象的移动上。

注意,如果仅仅是定义右值引用,那么obj本身不会被移走,在作为参数时会发生obj被移走:

    string str = "test";
    string&& r = move(str);
    cout<< r < 

输出结果:

 如果在参数中使用move()包裹:

    string str = "test";
    string&& r = move(str);
    cout<< r < 

输出结果:

 可以看到str已经变成空值了。

解释如下:c++ move函数到底是什么意思? - 知乎

在函数内部的形参,即使它被声明为右值引用类型,并被绑定一个右值引用类型的实参,但它本身仍然是左值,无法由它触发移动XX函数,除非对它再次使用move函数或者forward函数。因此,如果你在移动构造函数里面想要再次触发移动语义,那么就必须放在move里用,比如移动构造函数的入参对象里面有个string类型的成员变量,想移动到*this对象的对应string成员变量,就得包在move里面;

场景2:

此外,move()配合push_back()函数使用,可以降低开销!

示例:

    vector test1;
    vector test2;
    clock_t start,end;
        start = clock();
    for(int i = 0; i < 1000000; ++i) {
        string str = "abcdefg";
        test1.push_back(str);
    }
        end = clock(); 
        cout<<"time1 = "< 

输出结果可能为:

 可以看到,加了move函数的速度明显快于不加move函数,需要注意的是加了move函数之后str会被清空(正如场景1所述)。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5699672.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存