微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么不使用 std::move 一切?

如何解决为什么不使用 std::move 一切?

我不完全理解这个答案。为什么我们不都将类型与 std::move 一起使用?

示例;

std::map<int,int> try;

void foo(std::map<int,int>& try,int t1,int t2)
{
    try.emplace(std::move(t1),std::move(t2));
}

int main()
{
    int k = 1;
    int v = 5;

    try.emplace(k,v); // emplace copies
    foo(try,k,v); // emplace referance
    return 0;
}

那么不同的 emplace 副本和 emplace 引用是什么?我知道 std::move 比使用副本更有效。 (如果我知道错了,对不起。我是初学者)那我可以用什么?使用副本还是 std::move?抱歉我的英语不好。

解决方法

不总是移动一个对象的原因是移动了一个对象后,你就不再拥有它了。

void f()
{
    Object o;
    o.stuff();
    SomeFunctionTakingAReference(o);
    o.stuff(); // your o object is still usable
    SomeFunctionTakingAReference(std::move(o));
    // Here your o object is not valid anymore. It's gone and you have a valid but different object

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。